正则表达式可以判断出重复的字符,但是无法给出重复的次数和重复位置,所以还需要自己来编程解决
在沛县等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供网站设计制作、做网站 网站设计制作专业公司,公司网站建设,企业网站建设,品牌网站建设,营销型网站建设,外贸网站制作,沛县网站建设费用合理。
完整的Java程序如下
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class AA {
public static void main(String[] args) {
String str="OHnonononogod";
String regex="([A-Za-z]+?)\\1+";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(str);
while(m.find()){
String duplicate=m.group(1);
int times=0,start=0,po;
while((po=str.indexOf(duplicate,start))!=-1){
start=po+duplicate.length();
times++;
}
int position=str.indexOf(m.group(0));
System.out.println(str);
System.out.println("重复的字符:"+duplicate);
System.out.println("重复的次数:"+times);
System.out.println("重复的位置:"+(position+1)+"-"+start);
}
}
}
Java实现获取指定路径下的指定格式的文件代码如下:
package filenameFilter;
import java.io.File;
/*
* 实现功能:
* 获取指定路径下的指定格式的文件;
* */
public class Test {
public static void listPath(File file) {
// 接收筛选过后的文件对象数组
//用文件对象调用listFiles(FilenameFilter filter);方法,
//返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录
File files[] = file.listFiles(new MyFilenameFilter());
/*//遍历出指定文件路径下符合条件的文件
for (File f : files) {
System.out.println(f);
}*/
//遍历出指定文件路径下的所有符合筛选条件的文件
for(File f: files){
if(f.isDirectory()){
listPath(f);
}else{
System.out.println(f);
}
}
}
public static void main(String[] args) {
// 创建指定目录的文件对象
File file = new File("F:\\test");
// 调用文件晒筛选的方法,并将文件对象出入,
listPath(file);
}
}
package filenameFilter;
import java.io.File;
import java.io.FilenameFilter;
//实现FilenameFilter接口,可用于过滤器文件名
//本方法实现的是筛选指定格式结尾的文件
public class MyFilenameFilter implements FilenameFilter {
/**
* @param args
*
* 实现功能; 实现FilenameFilter接口,定义出指定的文件筛选器
*
*/
@Override
//重写accept方法,测试指定文件是否应该包含在某一文件列表中
public boolean accept(File dir, String name) {
// TODO Auto-generated method stub
// 创建返回值
boolean flag = true;
// 定义筛选条件
//endWith(String str);判断是否是以指定格式结尾的
if (name.toLowerCase().endsWith(".jpg")) {
} else if (name.toLowerCase().endsWith(".txt")) {
} else if (name.toLowerCase().endsWith(".gif")) {
} else {
flag = false;
}
// 返回定义的返回值
//当返回true时,表示传入的文件满足条件
return flag;
}
}
首先inOrderList的类型是ArrayListString。ArrayListString就是一个可变长数组,数组里的每个元素是一个字符串。
其次,第二个问题问的不是很明确。[所有集合的方法]指的是什么?ArrayList只是一种集合,常用的还有map等。后面的是泛型,jdk1.5以后才支持的,便于类型的指定,在编译的级别可以杜绝一部分类型转换的错误。补充一下,但泛型不能根本上解决集合元素,类型转换的所有问题。
public class TempArray {
public static void main(String[] args) {
//声明数值型数组
int[] array = {1, 2};
int[] array2 = new int[4];
//新增一个数组长度
array = Arrays.copyOf(array, array.length+1);
//将3这个数值赋值个数组索引 2 的位置,也就是最后面追加
array[array.length-1] = 3;
System.out.println(array2.length); //Result: 4
上面用的是数组,你也可以用 ArrayList 数组列表,是List的一个实现。
Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。
Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
Java由四方面组成:
1.Java编程语言,即语法。
2.Java文件格式,即各种文件夹、文件的后缀。
3.Java虚拟机(JVM),即处理*.class文件的解释器。
4.Java应用程序接口(Java API)。
匹配后缀名。
用
String.endsWith(".xls");
xls
xlsx
xlsm
1.两点需要注意
1.string.spilt("\\.")分割字符串成子字符串数组,以“.”分割,必须写成string.spilt("\\.")的方式,不能写成string.spilt(".")。斜线必须是反斜线且。
2.获取分割后的字符串数组,要获得最后一个item的index ,方式是int suffixIndex = strArray.length -1;
public String getFileType(String fileName) {
String[] strArray = fileName.split("\\.");
int suffixIndex = strArray.length -1;
System.out.println(strArray[suffixIndex]);
return "strArray[suffixIndex]";
}
以下都是one by one letter打的,不容易,给点分吧。
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import javax.swing.JFileChooser;
/**
* 1.选择被复制的源目录:sourcePath
* 2.选择文件被复制后存放的目标目录:targetPath
* 3.文件后缀名分类文件,并且将文件复制到不同的文件夹
*
*/
public class FileDemo {
/**
* 启动方法
* @param args
*/
public static void main(String[] args) {
/**
* 选择被复制的源目录:sourcePath
*/
File sourcePath = getSourcePath();
/**
* 选择文件被复制后存放的目标目录:targetPath
*/
File outputPath = getOutputPath();
/**
* 执行复制操作
*/
handlePath(sourcePath, outputPath);
}
/**
* 处理文件分类复制
* @param sourcePath
* @param outputPath
*/
private static void handlePath(File sourcePath, File outputPath) {
if (sourcePath == null || outputPath == null) //1.如果没有选择源目录或目标目录,则返回
return;
for (File file : sourcePath.listFiles()) { //2.取得源目录下所有的文件或文件夹,并进行遍历
if (file.isDirectory()) {
//3.如果当前遍历的是文件夹,则使用递归调用,继续处理该文件夹下面的所有文件或文件夹
handlePath(file, outputPath);
} else {
//4.如果当前遍历的是不是文件夹而是文件,那么直接开始copy的操作
//4.1.取得文件的文件名,包含文件后缀名
String fileName = file.getName();
if (fileName.contains(".")) {
//4.2.1.如果该文件有后缀名,即包含“.”点符号,则取得文件的后缀名为:最后一个点符号后面的字符串
String suffix = fileName.substring(fileName.lastIndexOf('.') + 1);
//4.2.2.根据文件最后的输出的目标目录和文件的后缀名,执行copy的操作(因为最后输出格式为按文件的后缀名分类,即最后输出如:pdf目录下面有pdf文件,txt目录下面有txt文件)
copy(file, new File(outputPath, suffix));
} else {
//4.3.如果该文件没有后缀名,即不包含“.”点符号,则直接在文件最后的输出的目标目录下建立“nosuffix”目录,执行copy的操作,将没有后缀名的文件复制到nosuffix目录下
copy(file, new File(outputPath, "nosuffix"));
}
}
}
}
/**
* 单个文件复制操作
* @param sourceFile
* @param targetDir
*/
private static void copy(File sourceFile , File targetDir){
System.out.println("copying " + sourceFile);
//1.如果目标目录不存在,则新建,此处的目标目录为按文件后缀名命名的目录,如pdf目录,txt目录以及nosuffix目录
if(!targetDir.exists()){
targetDir.mkdir();//新建目录
}
try {
//2.将源文件读取到输入流中
FileInputStream fis = new FileInputStream(sourceFile);
//3.按照目标目录和文件名构建文件输出流
FileOutputStream fos = new FileOutputStream(new File(targetDir , sourceFile.getName())) ;
//4.定义缓冲区,大小为102400byte
byte[] buf = new byte[102400];
//5.定义输入流读取到的文件大小,下面会用到
int available = 0;
//6.fis.available():使用输入流fis读取当前文件的大小,将读取到的大小赋值给available
while((available = fis.available()) buf.length){
//7.如果当前读取到的大小available大于定义的缓冲区的大小102400,则用fis.read(buf)方法读取文件。
//此时,缓冲区buf会被完全读满,即源文件的前102400 byte的数据都会被读取到buf中,
//fis下一次读取就会从102401 byte开始读,即文件读取的开始位置移动到了available+1的位置上
fis.read(buf);
//8.使用文件输入流fos将缓冲区buf中的内容写入到目标文件中
fos.write(buf);
}
//9.上面的循环始终会结束,因为文件的大小不可能无限的大,当上面循环的判断使用fis.available()读取到当前剩余的文件大小小于102400 byte时,
//使用fis.read(buf, 0, available)将剩余的文件数据读取的buf对应的位置,
//例如,最后剩下的文件数据大小为100 byte,即available的值为100,那么使用执行方法fis.read(buf, 0, available),后,
//buf数组中的buf[0]到buf[99]会有数据,buf[100]之后的就都是空了。
fis.read(buf, 0, available);
//10.调用输出流fos.write(buf, 0, available)表示将buf中的前available大小的数据输出,
//例如上面举得例子,就只会将buf中的前100位数据输出。
fos.write(buf, 0, available);
fis.close();
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 弹出文件选择对话框,选择要被复制的源目录
* @return
*/
private static File getSourcePath(){
//1.弹出文件选择对话框
JFileChooser chooser = new JFileChooser();
//2.设置只能选择目录
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
//3.返回选择的目录,如果没有选择则返回null
if(chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION){
return chooser.getSelectedFile();
}
return null;
}
/**
* 弹出对话框,选择文件复制后存放的目标目录
* @return
*/
private static File getOutputPath(){
//1.弹出文件选择对话框
JFileChooser chooser = new JFileChooser();
//2.设置只能选择目录
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
//3.返回选择的目录,如果没有选择则返回null
if(chooser.showSaveDialog(null) == JFileChooser.APPROVE_OPTION){
return chooser.getSelectedFile();
}
return null;
}
}