目前我只能返回40。
之后我想要第二个数字(在本例中为1,600,077.17)
但是之后没有像#1,000; 1,000.00"或者" 23"或者" 70"。
请记住String" str"只是一个示例值有时会改变。
public static String extractNumber1(final String line) {
String str = "cows 40 1,600,077.17 1,000.00 23 70";
if(str == null || str.isEmpty()) return "";
StringBuilder sb = new StringBuilder();
boolean found = false;
for(char c : str.toCharArray()){
if(Character.isDigit(c)){
sb.append(c);
found = true;
} else if(found){
// If we already found a digit before and this char is not a digit, stop looping
break;
}
}
return sb.toString();
}
答案 0 :(得分:0)
使用
string[] strAr = str.Split(' ');
将您的字符串转换为字符串数组。
strAr[2]
将是1,600,077.17
答案 1 :(得分:0)
我会在使用空格之前拆分字符串。例)String[] strings = str.split(" ")
。然后只需检查数组中的每个数字值。然后,您可以轻松选择要保留的值。
答案 2 :(得分:0)
您可以使用int found = 0;
每次找到数字时,都会找到found++
将else if更改为if(found==2)
,删除“else”
完整代码:
public static String extractNumber1(final String line) {
String str = "cows 40 1,600,077.17 1,000.00 23 70";
if(str == null || str.isEmpty()) return "";
StringBuilder sb = new StringBuilder();
int found = 0;
for(char c : str.toCharArray()){
if(Character.isDigit(c)){
sb.append(c);
found++;
} if(found==2){
// If we already found a digit before and this char is not a digit, stop looping
break;
}
}
return sb.toString();
}
编辑:删除其他
答案 3 :(得分:0)
您可以将found
设为int
,当您找到一个号码并在found = 2
上中断时增加它。
我会使用不同的方法,我会分割字符串并检查部分是否是尝试转换为双倍的数字
public static String extractNumber1(final String line) {
String str = "cows 40 1,600,077.17 1,000.00 23 70";
if(str == null || str.isEmpty()) return "";
String[] parts = str.split(" ");
StringBuilder sb = new StringBuilder();
int found = 0;
int i = 0;
while(i < parts.length && found < 2){
try {
long x = Long.parseLong(parts[i]);
found++;
sb.append(parts[i]);
} catch(Exception e) {
} finally {
i++; // continue with the loop without breaking
}
}
return sb.toString();
}
答案 4 :(得分:0)
String str = "cows 40 1,600,077.17 1,000.00 23 70";
Pattern p = Pattern.compile("(\\w+) (\\d+) ([0-9,.]+) ([0-9,.]+) (\\d+) (\\d+)");
Matcher m = p.matcher(str);
if (m.matches()) {
for (int i = 1; i <= m.groupCount(); i++)
System.out.println(i + ": " + m.group(i));
}
输出
1: cows
2: 40
3: 1,600,077.17
4: 1,000.00
5: 23
6: 70
例如,如果你想获得前两个数字,比如问题所说的,并且你想要它们作为实际数字而不是字符串,请在if
语句中执行此操作:
NumberFormat fmt = NumberFormat.getInstance();
int firstNumber = Integer.parseInt(m.group(2));
double secondNumber = fmt.parse(m.group(3)).doubleValue();
System.out.printf("1st = %d 2nd = %.2f%n", firstNumber, secondNumber);
输出
1st = 40 2nd = 1600077.17