带空格输入的不同结果的索引



在获取两个分隔符之间的所有字符串时,我遇到了一个小问题。正如我在其他相关问题上看到的那样,在两个分隔符之间获取字符的方法如下:给定一些字符串,在我的例子"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
}

应该如下:

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

演示:

public class Main {
public static void main(String[] args) {
String currLine = "void                    foo                   (    int a      ,      String      b              )               {                 ";
String parameters = currLine.substring(currLine.indexOf("(") + 1, currLine.indexOf(")")).trim();
System.out.println(parameters);
}
}

输出:

int a      ,      String      b

注意,String#substring(int beginIndex, int endIndex)返回从指定的beginIndex开始的子字符串,并扩展到索引endIndex - 1处的字符。

最新更新