从这一行文本中获取第二个数字

时间:2017-04-23 21:50:53

标签: java file text jtextarea

目前我只能返回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(); }

5 个答案:

答案 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)

使用regular expression

解析该行
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