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 ) "
我不知道如何解决这个问题而不会给第一种情况造成问题。

回答

问题是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
}


以上是IndexOf输入带空格的不同结果的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>