2013-03-06 37 views
-4

有人可以帮助我完成这项任务,我感谢您的参与时间。字符串的文件名

有大量的文件名(文件名字符串),我必须从下面的示例文件名中得到每个文件名的ID形式。

1100_007_1_ALL_GC_Identify_TOA.txt 
1100_007_2_ALL_GC_Identify_TOA.txt 
1100_008A_1_ALL_GC_Set_Individual_In-Active.txt 
1100_008B_2_ALL_GC_Set_Individual_In-Active_TP.txt 
1100_001_TOA_Indiv.txt 
1100_002_TOA_Indiv.txt 
1100_006_ALL_GC_Check_In_Active_TOA.txt 
1100_010_TOA_Control_1.txt 

Final output should be :- 
File ID's: 
1100_007_1 
1100_007_2 
1100_008A_1 
1100_008B_1 
1100_001 
1100_002 
1100_006 
1100_010 

我尝试以下,但它并不适用于文件1100_008A_1

public static String stripNonDigits(final String input){ 
    final StringBuilder sb = new StringBuilder(); 
    for(int i = 0; i < input.length(); i++){ 
     final char c = input.charAt(i); 
     if(c > 47 && c < 58){ 
     sb.append(c); 
     } 
    } 
    return sb.toString(); 
} 
+3

你有没有尝试过,或者你只是在寻找少量的免费编程? – arcy 2013-03-06 18:13:07

+2

我们可以帮助解决您的代码问题,但我们不会为您编写代码。 – 2013-03-06 18:14:42

+0

只要检查你的'char =='_''和下面的是一个字母。如果是这样,用最后一个字符串进行子串处理。 – Rob 2013-03-06 18:15:13

回答

0

工作由你给出的例子,这会工作:

String filename = "1100_007_1_ALL_GC_Identify_TOA.txt"; 
String id = filename.replaceAll("_\\D.*", ""); 

下面的正则表达式假设在'ID'部分后面有一个'_'符号,后面跟着一些除数字之外的字符。

+0

这将是正常的,除非那些是十六进制数字,在这种情况下,他可以在任何位置有一个十六进制数字(数字)(a-f)。但是对于给出的例子,并且可能对于他所拥有的一切,这看起来很好。我打算建议在包含任何非十六进制数字的非下划线的第一个分组之前终止下划线。 – arcy 2013-03-06 19:33:20