首页 > 解决方案 > IndexOf 不同的结果,带空格的输入

问题描述

在两个分隔符之间获取所有字符串时,我遇到了一个小问题。正如我在其他相关问题上看到的那样,在两个分隔符之间获取字符的(一种)方法如下:给定一些字符串,在我的示例中"void foo(int a, int b) {",我想获取括号之间的每个字符。使用:

String parameters = currLine.trim().substring(currLine.indexOf("("),
                    currLine.indexOf(")")-1);

currLine当然是哪里"void foo(int a, int b) {"。现在一切正常,因为我得到了"int a, int b"字符串。问题是使用如下字符串:

    void                    foo                   (    int a      ,      String      b              )               {                 

我明白了:参数="nt a , String b ) " 而且我不知道如何解决这个问题而不会给第一种情况造成问题。

标签: javastring

解决方案


问题是trim不修改原来的String。因此,当您计算 时,substring您会获得不同的结果,具体取决于输入是否String在开头或结尾有空格,因为indexOf是在原始String.

一种可能的解决方案如下:

// Trim the value
String trimmed = currLine.trim();
// And operate with it
String parameters = trimmed.substring(trimmed.indexOf("("),
                    trimmed.indexOf(")")-1);

一种可能的更好方法是在提供的值上计算正则表达式以提取括号之间的信息,例如:

Matcher m = Pattern.compile("\\((.*?)\\)").matcher(currLine);
if (m.find()) {
  String parameters = m.group(1);
  // Operate with parameters
}

推荐阅读