我有一些字符串,我需要根据第一次出现的标点符号或第一次出现的数字从中提取子字符串.例如
从Taltz 80毫克自动注射器我需要提取Taltz或从0.75毫克Trulicity,每周我需要提取Trulicity
这是我的代码:
char [] punctuations = {'.' , ',' , ';' , ':','"' , '\'' ,'/', ')' , '('};
String value = "Taltz, 80mg autoinjector";
int pos = value.replaceFirst("^(\\D+).*$", "$1").length();
for(int j = 0; j < value.length(); j++) {
for (int k = 0; k < punctuations.length;k++){
if(value.charAt(j) == punctuations[k]){
value = value.substring(0,value.indexOf(punctuations[k]));
break;
}
}
}
if(value.matches(".*\\d+.*")){
value = value.substring(0, pos);
}
System.out.println(value);
}
有没有更有效的方法来做到这一点?
最佳答案 您可以定义要保留的部分并使用正则表达式捕获它:
String s = "Taltz test 80mg autoinjector";
Pattern pattern = Pattern.compile("([a-zA-Z ]+).*");
Matcher matcher = pattern.matcher(s);
if(matcher.matches()) {
System.out.println("matches : " + matcher.group(1).trim());
} else {
System.out.println("Does not match");
}
输出:
Taltz test
您还可以使用以下正则表达式捕获“既不是标点符号也不是数字”的所有内容:
Pattern pattern = Pattern.compile("([^0-9;,:.?]+).*");
(相同输出)