Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从大字符串中提取int_Java - Fatal编程技术网

Java 从大字符串中提取int

Java 从大字符串中提取int,java,Java,我正试图从字符串中获取int。字符串将始终显示为: "mombojumbomombojumbomombojumbomombojumbomombojumbomombojumbohello=1?fdjaslkd;fdsjaflkdjfdklsa;fjdklsa;djsfklsa;dfjklds;afj=124214fdsamf=352" 所有这些中唯一的常量是,我将有一个“hello=“,后跟一个数字。就这样,我想不出如何在“hello=“之后提取号码。这就是我到目前为止所尝试的,但没有成功 编辑

我正试图从
字符串
中获取
int
字符串将始终显示为:

"mombojumbomombojumbomombojumbomombojumbomombojumbomombojumbohello=1?fdjaslkd;fdsjaflkdjfdklsa;fjdklsa;djsfklsa;dfjklds;afj=124214fdsamf=352"
所有这些中唯一的常量是,我将有一个
“hello=“
,后跟一个数字。就这样,我想不出如何在
“hello=“
之后提取号码。这就是我到目前为止所尝试的,但没有成功

编辑:数字后面总是跟一个“?”

我不知道如何将它与
int
的两侧隔离开来

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)
提取数字(因为这些数字在模式中分组)。

尝试以下操作:

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;
int col=s.indexOf(“hello=”);//查找标记字符串的起始列
如果(列>=0){
字符串s2=s.substring(col+6);//获取数字和其余数字(添加标记的长度)
col=0;
//现在找到数字的结尾(假设没有加号、逗号或点字符)
while(col0){
r=s2.子字符串(0,col);//将前面的数字去掉
}
}
r将是您想要的字符串,或者如果找不到数字,则为空。

您应该使用a来表示:

    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
    }

这里是另一种非正则表达式性能方法。包装在一个方便您的方法

辅助方法

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

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

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);

您的字符串大致有多大,性能有多重要?我问,除非你的字符串非常大,而且性能非常关键,否则正则表达式可以很容易地处理这个问题,大约就是这个大小。不会再大了。改用正则表达式。与此线程非常相似,然后使用正则表达式解决方案作为答案发布。。这基本上就是正则表达式的用途。@LeeMeador是的,它是这样做的,就在这段混乱的文字添加了一个解释之后。希望对你有帮助。是的。请注意,您的答案现在不仅对OP有帮助,而且对未来的读者也有帮助。@EGHDK是的,它会的。(或者实际上是字符串“27”。如果您想要实际的整数,请使用)。+1因为这很可能比正则表达式快,但是如果情况发生变化,正则表达式可能更直接,更容易修改(假设您知道正则表达式)。@increment1 True。因为它很简单。。。a) 以indexOf开始,b)找到数字序列的结尾,c)得到字符串,我喜欢这个。在现实生活中,我会先找到两个列号,然后调用一个
子字符串
以避免创建临时字符串。这是一个老习惯。我刚意识到这和李·米多尔的基本相同
Integer result = getIntegerForKey("hello=", yourInputString);

if (result != null)
    System.out.println(result);
else
    System.out.println("Key-integer pair not found.");
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);