正則表達(dá)式可以判斷出重復(fù)的字符,但是無(wú)法給出重復(fù)的次數(shù)和重復(fù)位置,所以還需要自己來(lái)編程解決
在沛縣等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站設(shè)計(jì)制作、做網(wǎng)站 網(wǎng)站設(shè)計(jì)制作專業(yè)公司,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站建設(shè),營(yíng)銷型網(wǎng)站建設(shè),外貿(mào)網(wǎng)站制作,沛縣網(wǎng)站建設(shè)費(fèi)用合理。
完整的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("重復(fù)的字符:"+duplicate);
System.out.println("重復(fù)的次數(shù):"+times);
System.out.println("重復(fù)的位置:"+(position+1)+"-"+start);
}
}
}
Java實(shí)現(xiàn)獲取指定路徑下的指定格式的文件代碼如下:
package?filenameFilter;
import?java.io.File;
/*
*?實(shí)現(xiàn)功能:
*??????獲取指定路徑下的指定格式的文件;
*?*/
public?class?Test?{
public?static?void?listPath(File?file)?{
//?接收篩選過(guò)后的文件對(duì)象數(shù)組
//用文件對(duì)象調(diào)用listFiles(FilenameFilter?filter);方法,
//返回抽象路徑名數(shù)組,這些路徑名表示此抽象路徑名表示的目錄中滿足指定過(guò)濾器的文件和目錄
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)?{
//?創(chuàng)建指定目錄的文件對(duì)象
File?file?=?new?File("F:\\test");
//?調(diào)用文件曬篩選的方法,并將文件對(duì)象出入,
listPath(file);
}
}
package?filenameFilter;
import?java.io.File;
import?java.io.FilenameFilter;
//實(shí)現(xiàn)FilenameFilter接口,可用于過(guò)濾器文件名
//本方法實(shí)現(xiàn)的是篩選指定格式結(jié)尾的文件
public?class?MyFilenameFilter?implements?FilenameFilter?{
/**
*?@param?args
*
*????????????實(shí)現(xiàn)功能;?實(shí)現(xiàn)FilenameFilter接口,定義出指定的文件篩選器
*
*/
@Override
//重寫(xiě)accept方法,測(cè)試指定文件是否應(yīng)該包含在某一文件列表中
public?boolean?accept(File?dir,?String?name)?{
//?TODO?Auto-generated?method?stub
//?創(chuàng)建返回值
boolean?flag?=?true;
//?定義篩選條件
//endWith(String?str);判斷是否是以指定格式結(jié)尾的
if?(name.toLowerCase().endsWith(".jpg"))?{
}?else?if?(name.toLowerCase().endsWith(".txt"))?{
}?else?if?(name.toLowerCase().endsWith(".gif"))?{
}?else?{
flag?=?false;
}
//?返回定義的返回值
//當(dāng)返回true時(shí),表示傳入的文件滿足條件
return?flag;
}
}
首先inOrderList的類型是ArrayListString。ArrayListString就是一個(gè)可變長(zhǎng)數(shù)組,數(shù)組里的每個(gè)元素是一個(gè)字符串。
其次,第二個(gè)問(wèn)題問(wèn)的不是很明確。[所有集合的方法]指的是什么?ArrayList只是一種集合,常用的還有map等。后面的是泛型,jdk1.5以后才支持的,便于類型的指定,在編譯的級(jí)別可以杜絕一部分類型轉(zhuǎn)換的錯(cuò)誤。補(bǔ)充一下,但泛型不能根本上解決集合元素,類型轉(zhuǎn)換的所有問(wèn)題。
public class TempArray {
public static void main(String[] args) {
//聲明數(shù)值型數(shù)組
int[] array ?= {1, 2};
int[] array2 = new int[4];
//新增一個(gè)數(shù)組長(zhǎng)度
array = Arrays.copyOf(array, array.length+1);
//將3這個(gè)數(shù)值賦值個(gè)數(shù)組索引 2 的位置,也就是最后面追加
array[array.length-1] = 3;
System.out.println(array2.length); //Result: 4
上面用的是數(shù)組,你也可以用 ArrayList 數(shù)組列表,是List的一個(gè)實(shí)現(xiàn)。
Java是一種可以撰寫(xiě)跨平臺(tái)應(yīng)用軟件的面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言。
Java 技術(shù)具有卓越的通用性、高效性、平臺(tái)移植性和安全性,廣泛應(yīng)用于PC、數(shù)據(jù)中心、游戲控制臺(tái)、科學(xué)超級(jí)計(jì)算機(jī)、移動(dòng)電話和互聯(lián)網(wǎng),同時(shí)擁有全球最大的開(kāi)發(fā)者專業(yè)社群。
Java由四方面組成:
1.Java編程語(yǔ)言,即語(yǔ)法。
2.Java文件格式,即各種文件夾、文件的后綴。
3.Java虛擬機(jī)(JVM),即處理*.class文件的解釋器。
4.Java應(yīng)用程序接口(Java API)。
匹配后綴名。
用
String.endsWith(".xls");
xls
xlsx
xlsm
1.兩點(diǎn)需要注意
1.string.spilt("\\.")分割字符串成子字符串?dāng)?shù)組,以“.”分割,必須寫(xiě)成string.spilt("\\.")的方式,不能寫(xiě)成string.spilt(".")。斜線必須是反斜線且。
2.獲取分割后的字符串?dāng)?shù)組,要獲得最后一個(gè)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打的,不容易,給點(diǎn)分吧。
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import javax.swing.JFileChooser;
/**
* 1.選擇被復(fù)制的源目錄:sourcePath
* 2.選擇文件被復(fù)制后存放的目標(biāo)目錄:targetPath
* 3.文件后綴名分類文件,并且將文件復(fù)制到不同的文件夾
*
*/
public class FileDemo {
/**
* 啟動(dòng)方法
* @param args
*/
public static void main(String[] args) {
/**
* 選擇被復(fù)制的源目錄:sourcePath
*/
File sourcePath = getSourcePath();
/**
* 選擇文件被復(fù)制后存放的目標(biāo)目錄:targetPath
*/
File outputPath = getOutputPath();
/**
* 執(zhí)行復(fù)制操作
*/
handlePath(sourcePath, outputPath);
}
/**
* 處理文件分類復(fù)制
* @param sourcePath
* @param outputPath
*/
private static void handlePath(File sourcePath, File outputPath) {
if (sourcePath == null || outputPath == null) //1.如果沒(méi)有選擇源目錄或目標(biāo)目錄,則返回
return;
for (File file : sourcePath.listFiles()) { //2.取得源目錄下所有的文件或文件夾,并進(jìn)行遍歷
if (file.isDirectory()) {
//3.如果當(dāng)前遍歷的是文件夾,則使用遞歸調(diào)用,繼續(xù)處理該文件夾下面的所有文件或文件夾
handlePath(file, outputPath);
} else {
//4.如果當(dāng)前遍歷的是不是文件夾而是文件,那么直接開(kāi)始copy的操作
//4.1.取得文件的文件名,包含文件后綴名
String fileName = file.getName();
if (fileName.contains(".")) {
//4.2.1.如果該文件有后綴名,即包含“.”點(diǎn)符號(hào),則取得文件的后綴名為:最后一個(gè)點(diǎn)符號(hào)后面的字符串
String suffix = fileName.substring(fileName.lastIndexOf('.') + 1);
//4.2.2.根據(jù)文件最后的輸出的目標(biāo)目錄和文件的后綴名,執(zhí)行copy的操作(因?yàn)樽詈筝敵龈袷綖榘次募暮缶Y名分類,即最后輸出如:pdf目錄下面有pdf文件,txt目錄下面有txt文件)
copy(file, new File(outputPath, suffix));
} else {
//4.3.如果該文件沒(méi)有后綴名,即不包含“.”點(diǎn)符號(hào),則直接在文件最后的輸出的目標(biāo)目錄下建立“nosuffix”目錄,執(zhí)行copy的操作,將沒(méi)有后綴名的文件復(fù)制到nosuffix目錄下
copy(file, new File(outputPath, "nosuffix"));
}
}
}
}
/**
* 單個(gè)文件復(fù)制操作
* @param sourceFile
* @param targetDir
*/
private static void copy(File sourceFile , File targetDir){
System.out.println("copying " + sourceFile);
//1.如果目標(biāo)目錄不存在,則新建,此處的目標(biāo)目錄為按文件后綴名命名的目錄,如pdf目錄,txt目錄以及nosuffix目錄
if(!targetDir.exists()){
targetDir.mkdir();//新建目錄
}
try {
//2.將源文件讀取到輸入流中
FileInputStream fis = new FileInputStream(sourceFile);
//3.按照目標(biāo)目錄和文件名構(gòu)建文件輸出流
FileOutputStream fos = new FileOutputStream(new File(targetDir , sourceFile.getName())) ;
//4.定義緩沖區(qū),大小為102400byte
byte[] buf = new byte[102400];
//5.定義輸入流讀取到的文件大小,下面會(huì)用到
int available = 0;
//6.fis.available():使用輸入流fis讀取當(dāng)前文件的大小,將讀取到的大小賦值給available
while((available = fis.available()) buf.length){
//7.如果當(dāng)前讀取到的大小available大于定義的緩沖區(qū)的大小102400,則用fis.read(buf)方法讀取文件。
//此時(shí),緩沖區(qū)buf會(huì)被完全讀滿,即源文件的前102400 byte的數(shù)據(jù)都會(huì)被讀取到buf中,
//fis下一次讀取就會(huì)從102401 byte開(kāi)始讀,即文件讀取的開(kāi)始位置移動(dòng)到了available+1的位置上
fis.read(buf);
//8.使用文件輸入流fos將緩沖區(qū)buf中的內(nèi)容寫(xiě)入到目標(biāo)文件中
fos.write(buf);
}
//9.上面的循環(huán)始終會(huì)結(jié)束,因?yàn)槲募拇笮〔豢赡軣o(wú)限的大,當(dāng)上面循環(huán)的判斷使用fis.available()讀取到當(dāng)前剩余的文件大小小于102400 byte時(shí),
//使用fis.read(buf, 0, available)將剩余的文件數(shù)據(jù)讀取的buf對(duì)應(yīng)的位置,
//例如,最后剩下的文件數(shù)據(jù)大小為100 byte,即available的值為100,那么使用執(zhí)行方法fis.read(buf, 0, available),后,
//buf數(shù)組中的buf[0]到buf[99]會(huì)有數(shù)據(jù),buf[100]之后的就都是空了。
fis.read(buf, 0, available);
//10.調(diào)用輸出流fos.write(buf, 0, available)表示將buf中的前available大小的數(shù)據(jù)輸出,
//例如上面舉得例子,就只會(huì)將buf中的前100位數(shù)據(jù)輸出。
fos.write(buf, 0, available);
fis.close();
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 彈出文件選擇對(duì)話框,選擇要被復(fù)制的源目錄
* @return
*/
private static File getSourcePath(){
//1.彈出文件選擇對(duì)話框
JFileChooser chooser = new JFileChooser();
//2.設(shè)置只能選擇目錄
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
//3.返回選擇的目錄,如果沒(méi)有選擇則返回null
if(chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION){
return chooser.getSelectedFile();
}
return null;
}
/**
* 彈出對(duì)話框,選擇文件復(fù)制后存放的目標(biāo)目錄
* @return
*/
private static File getOutputPath(){
//1.彈出文件選擇對(duì)話框
JFileChooser chooser = new JFileChooser();
//2.設(shè)置只能選擇目錄
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
//3.返回選擇的目錄,如果沒(méi)有選擇則返回null
if(chooser.showSaveDialog(null) == JFileChooser.APPROVE_OPTION){
return chooser.getSelectedFile();
}
return null;
}
}