1

我有一个以下面格式显示的字符串

String str = "query at.dddimin ntoreturn:1 reslen:1833 nscanned:1  nquery: { like_symbol: \"SC!JNJ\" }  nreturned:1 bytes:1817";

我需要在at上面显示的点之后提取单词,以便输出应该是“ dddimin

我试过这种方式

String[] result = str.split("\\.");

System.out.println(result[1]);

但我得到的输出低于

dddimin ntoreturn:1 reslen:1833 nscanned:1  nquery: { unique_symbol: "SC!JNJ" }  nreturned:1 bytes:1817

任何人都可以告诉我如何在点之后得到这个词。

4

4 回答 4

5

对于解决字符串模式匹配问题的一般方法,请考虑使用正则表达式。在下面的代码中,正则表达式\.(\S+)说明:查找以点开头且后跟一个或多个非空格字符的字符串的匹配项,并在一组中捕获点之后的字符。在Java中,这将被写成如下:

Pattern regex = Pattern.compile("\\.(\\S+)");
Matcher match = regex.matcher(str);
if (match.find())
    System.out.println(match.group(1));

match.group(1)表达式将返回预期结果:

dddimin
于 2013-09-07T18:14:30.237 回答
3
int dot = str.indexOf('.')+1;
String result = str.substring(dot,str.substring(dot).indexOf(' '));
于 2013-09-07T18:10:51.930 回答
0

如果你想使用split(),在这种情况下,你的正则表达式需要用点和空格分开:

String[] result = str.split("\\ |\\.");
assertEquals("dddimin", result[2]);
于 2013-09-07T18:14:06.123 回答
0
int dot = str.indexOf('.');
String result = str.substring(dot + 1, dot + str.substring(dot).indexOf(' '));
于 2013-09-07T18:23:38.110 回答