我有一个字符串数组“ stringArray”,内容如下:
"ADU-30"
"ADU-30 plus a cam"
"ADU-30 plus internal cam"
"ADU-60"
"ADU-60 plus a cam"
"ADU-60 plus internal cam"
"ADU-301"
我的目标是能够提取“ ADU-”部分,其中包括连字符右侧的数字。目前,我可以提取连字符右侧仅有两个数字的数字,如下所示:
for (int i = 0; i < stringArray.length(); i++) {
stringArray[i] = stringArray[i].substring(0,6);
}
但是,当我将子字符串参数从substring(0,6)
更改为substring(0,7)
时,它崩溃在连字符右边仅两位数字的项目上。如何存储三位数的项目?另外,是否有更好的方法可以使用子字符串呢?我想要的最终结果是以下字符串数组:
"ADU-30"
"ADU-60"
"ADU-301"
答案 0 :(得分:2)
按照当前的模式,您可以将硬编码的子字符串替换为基于正则表达式的replaceAll
(或replaceFirst
):
for (int i = 0; i < stringArray.length; i++) {
stringArray[i] = stringArray[i].replaceAll("(ADU-\\d+).*", "$1");
}
这表示用匹配ADU-\\d+
的部分或组替换整个字符串,该部分或组是字符串"ADU-"
,后跟1个或多个数字。捕获组".*"
之后的模式只是说要匹配零个或多个任何类型的字符,这将照顾字符串的剩余部分(可能是空的)。
测试:
String[] stringArray = {
"ADU-30",
"ADU-30 plus a cam",
"ADU-30 plus internal cam",
"ADU-60",
"ADU-60 plus a cam",
"ADU-60 plus internal cam",
"ADU-301"
};
for (int i = 0; i < stringArray.length; i++) {
stringArray[i] = stringArray[i].replaceAll("(ADU-\\d+).*", "$1");
}
for(String str : stringArray)
System.out.println(str);
输出:
ADU-30
ADU-30
ADU-30
ADU-60
ADU-60
ADU-60
ADU-301
答案 1 :(得分:1)
“强力”方法如下:
for (int i = 0; i < stringArray.length; i++) {
String s = stringArray[i];
StringBuffer sb = new StringBuffer();
for (int j = 0; j < s.length(); j++) {
char c = s.charAt(j);
if (c == ' ')
break;
sb.append(c);
}
stringArray[i] = sb.toString();
}
答案 2 :(得分:1)
尝试使用Java Pattern和Matcher类。
String[] stringArray = new String[] {"ADU-6022 plus a cam",
"ADU-30",
"ADU-30 plus a cam",
"ADU-30 plus internal cam",
"ADU-60",
"ADU-60 plus a cam",
"ADU-60 plus internal cam",
"ADU-301"};
String regex = "(ADU-\\d+)";
Pattern p = Pattern.compile(regex);
Matcher m;
for (int i = 0; i < stringArray.length; i++) {
m = p.matcher(stringArray[i]);
while (m.find()) {
System.out.println(m.group(1) );
}
}
答案 3 :(得分:0)
使用正则表达式提取第一组。
// String to be scanned to find the pattern.
String line = "ADU-30 plus a cam";
String pattern = "^(ADU-\\d+).*$";
// Create a Pattern object
Pattern r = Pattern.compile(pattern);
// Now create matcher object.
Matcher m = r.matcher(line);
if (m.find()) {
System.out.println("Found value: " + m.group(0) );
} else {
System.out.println("NO MATCH");
}
此模式^(ADU-\d+).*$
说:
从字符串(^
)的开头开始
捕获“ ADU” +一些数字((ADU-\d+)
)
匹配任何内容,直到字符串(.*$
)的结尾