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