从大字符串中提取int

时间:2013-07-25 21:41:56

标签: java

我正试图从int获得StringString始终为:

"mombojumbomombojumbomombojumbomombojumbomombojumbomombojumbohello=1?fdjaslkd;fdsjaflkdjfdklsa;fjdklsa;djsfklsa;dfjklds;afj=124214fdsamf=352"

所有这一切中唯一不变的是,我将有"hello="后跟一个数字。有了这个,我无法弄清楚如何在"hello="之后提取数字。这是我到目前为止没有运气的尝试。

编辑:该号码后面会跟一个“?”

String[] tokens = s.split("hello=");
for (String t : tokens)
    System.out.println(t);

我无法弄清楚如何将其与int的两侧隔离开来。

5 个答案:

答案 0 :(得分:13)

Pattern p = Pattern.compile("hello=(\\d+)");
Matcher m = p.matcher (s);
while (m.find())
    System.out.println(m.group(1));

这会设置搜索s中包含hello =后跟一个或多个数字(\\d+表示一个或多个数字)的任何位置。循环查找此模式的每次出现,然后每当找到匹配时,m.group(1)将提取数字(因为这些数字在模式中分组)。

答案 1 :(得分:2)

您应该使用regular expression

    String str = "mombojumbomombojumbomombojumbomombojumbomombojumbomombojumbohello=1fdjaslkd;fdsjaflkdjfdklsa;fjdklsa;djsfklsa;dfjklds;afj=124214fdsamf=352";
    Pattern p = Pattern.compile("hello=(\\d+)");
    Matcher m = p.matcher(str);
    if (m.find()) {
        System.out.println(m.group(1)); // prints 1
    }

答案 2 :(得分:1)

试试这个:

String r = null;
int col = s.indexOf("hello="); // find the starting column of the marker string
if (col >= 0) {
    String s2 = s.substring(col + 6); // get digits and the rest (add length of marker)
    col = 0;
    // now find the end of the digits (assume no plus or comma or dot chars)
    while (col < s2.length() && Character.isDigit(s2.charAt(col))) {
        col++;
    }
    if (col > 0) {
        r = s2.substring(0, col); // get the digits off the front
    }
}

r将是您想要的字符串,如果没有找到数字,它将为null。

答案 3 :(得分:0)

这是另一种非正则表达式方法。为方便起见,包含在方法中

辅助方法

 public static Integer getIntegerForKey(String key, String s)
 { 
    int startIndex = s.indexOf(key);

    if (startIndex == -1)
        return null;

    startIndex += key.length();

    int endIndex = startIndex;

    int len = s.length(); 

    while(endIndex < len && Character.isDigit(s.charAt(endIndex))) {
        ++endIndex;
    }

    if (endIndex > startIndex)
        return new Integer(s.substring(startIndex, endIndex));

    return null;
 }

用法

Integer result = getIntegerForKey("hello=", yourInputString);

if (result != null)
    System.out.println(result);
else
    System.out.println("Key-integer pair not found.");

答案 4 :(得分:0)

另一种非正则表达式解决方案:

String str = "mombojumbomombojumbomombojumbomombojumbomombojumbomombojumbohello=142?fdjaslkd;fdsjaflkdjfdklsa;fjdklsa;djsfklsa;dfjklds;afj=124214fdsamf=352";
char arr[] = str.substring(str.indexOf("hello=")+6).toCharArray();
String buff ="";
int i=0;
while(Character.isDigit(arr[i])){
    buff += arr[i++];
}
int result = Integer.parseInt(buff);
System.out.println(result);