Java 获取字符串中给定单词后的子字符串的最佳方法?

Java 获取字符串中给定单词后的子字符串的最佳方法?,java,string,parsing,substring,lastindexof,Java,String,Parsing,Substring,Lastindexof,我有一个长字符串,它是一个json文件内容。在这个字符串的某个地方,它包含以下内容:“totalWinAmount”:100 要查找并返回此值,我当前正在执行以下操作: int totalWinAmountIndex = line.lastIndexOf("totalWinAmount"); String resultTotalWinAmount = line.substring(totalWinAmountIndex + 16, totalWinAmountIndex + 19); 这是可行

我有一个长字符串,它是一个json文件内容。在这个字符串的某个地方,它包含以下内容:“totalWinAmount”:100

要查找并返回此值,我当前正在执行以下操作:

int totalWinAmountIndex = line.lastIndexOf("totalWinAmount");
String resultTotalWinAmount = line.substring(totalWinAmountIndex + 16, totalWinAmountIndex + 19);
这是可行的,resultTotalWinAmount被正确地设置为100,但我很好奇这是否是这种情况下的最佳实践,这是否真的是糟糕的编码,或者是否有更好的方法来实现它?

您可以使用RegExp:
“\s*totalWinAmount\s*”\s*:\s*(?\d*)

这是


这是获取两个值的最简单的方法(我认为使用json转换器是因为这个原因而产生的开销)。但是如果你想找到更多的值,那么肯定要使用json转换器(例如Jackson)。

你也可以尝试使用正则表达式提取值。 像这样的方法应该会奏效:

resultTotalWinAmount = str.split(".*\"totalWinAmount\"\\s*:\\s*")[1].split("\\D+")[0];
这有点凌乱,但在没有附加库的情况下也可以使用


不过,我同意孙先生的看法。要正确分析json,您应该始终使用类似Jackson或GSON的东西。

您可以使用regex。这取决于它的用途、使用位置等。在专业的业务环境中,我会使用json库将整个内容解析为对象表示,然后从中获取值。我在家里为自己开发了一个小工具,我可能会像你那样做。如果它总是在同一个地方,并且
totalWinAmount
保持不变,那么你所做的事情就没有真正的问题。除了可能使用常量代替硬编码
16
19
。但是也许考虑一个合适的JSON解析器。