我需要传递一个包含许多参数的字符串参数。收到参数时,我使用 String.split() 对其进行拆分以获取所有参数。但是出现了一个问题。如何设计我的字符串 decollator 以便可以正确传递键盘上的任何 ASCII 代码。 希望得到任何建议。
问问题
66 次
4 回答
1
选择一个易于输入且不太可能出现在输入中的字符。假设字符是#
。
正常输入就好了Item 1#Item 2#Item 3
。实际上,您可以.trim()
每一项都可以让用户输入Item 1 # Item 2 # Item 3
,如果他/她喜欢的话。
但是,就像您描述的那样,假设用户想输入Item #1
,Item #2
等。有几种方法可以让他/她这样做,但更容易的是让他们逃脱分隔符。例如,代替Item #1 # Item #2 # Item #3
会导致正常找到 6 个不同项目的 ,让用户输入,例如Item ##1 # Item ##2 # Item ##3
。然后在您的解析中,确保处理#
连续输入两个或多个 ' 的情况。split
可能不够好,您必须自己遍历字符串。
这是一个为您拆分输入字符串的方法的草图:
private static List<String> parseArguments(String input) {
ArrayList<String> arguments = new ArrayList<String>();
String[] prelArguments = input.split("#");
for (int i = 0; i < prelArguments.length; i++) {
String argument = prelArguments[i];
if (argument.equals("")) {
// We will enter here if there were two or more #'s in a row
StringBuilder combinedArgument = new StringBuilder(arguments.remove(arguments.size() - 1));
int inARow = 0;
while (prelArguments[i+inARow].equals("")) {
inARow++;
combinedArgument.append('#');
}
i += inARow;
combinedArgument.append(prelArguments[i]);
arguments.add(combinedArgument.toString());
} else {
arguments.add(argument);
}
}
return arguments;
}
上面缺少错误处理、极端情况处理和一些性能改进,但我认为这个想法是通过的。
于 2012-08-27T12:45:34.403 回答
1
我会消除这个问题,即滥用 String 作为参数容器。如果您需要传递更多参数,请传递更多参数。如果这失控了,请考虑传递一个地图,或者一个可以包含所有参数的自定义对象。
于 2012-08-27T22:08:54.257 回答
1
如果我理解正确 - 您需要将一组参数编码为一个字符串。您可以为此目的使用一些字符序列,例如
final String delimiter = "@#@"
String value = "param1@#@param2@#@param3";
String[] parameters = value.split(delimiter);
于 2012-08-27T12:07:58.290 回答
1
也许您可以查看可变参数而不是拆分字符串。例如:
public void method(String... strings) {
// strings is actually an array
String firstParam = strings[0];
String secondParam = strings[1];
// ...
}
来电:
method("string1");
method("string1", "string2", "string3");
// as many string args as you want
于 2012-08-27T12:01:39.660 回答