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