2013-07-25 76 views
0

我试图从String获取int。该String会经常来的:从大字符串中提取int

"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的两侧隔离它。

+1

你有多大的字符串粗略,并且有多重要是表现?我问,除非你的字符串非常大,性能非常关键,那么正则表达式可以很容易地处理。 –

+0

就是这个尺寸。不会更大。 – EGHDK

+0

改为使用regex。非常类似于这个线程http://stackoverflow.com/questions/2127898/use-regex-to-extract-integer-from-url-in-a-string-with-php – VadimM

回答

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

这建立用于任何地方s包含你好搜索=后面跟着一个或多个数字(\\d+指一个或多个数字)。循环查找此模式的每次出现,然后在找到匹配时,m.group(1)提取数字(因为这些数字按模式分组)。

+1

小心解释你的代码? –

+1

我添加了一个解释。希望它有帮助。 – ajb

+0

这项工作是“你好= 27”吗?它会返回27吗? – EGHDK

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将是你想要的字符串,或者也将是无效的,如果没有号码被发现。

+0

+1,因为这可能比正则表达式更快,但是如果情况改变(假设您知道正则表达式),则正则表达式可能更直接并且更易于修改。 –

+0

@ increment1你是真的。因为它简单... a)用indexOf找到开始,b)找到数字序列结束的地方,c)得到字符串,我喜欢这个。在现实生活中,我会首先找到两个列号,并执行一次'substring'调用以避免创建临时字符串。这是一个古老的习惯。 –

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 
    } 
0

这里是另一个非正则表达式的表现方式。裹的方法为您提供方便

Helper方法

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."); 
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); 
+0

我刚刚意识到这与李·梅多尔的基本相同 – jsedano