Java拆分字符串(检查给定参数)
对于Java IRC客户端,我有一个登录功能。如果您键入“!LOGIN user pass”,它将让您登录 现在,如果用户使用空间过多或仅使用1个参数而不是“user”+“pass”,那么由于我拆分行的方式,程序将崩溃 我很难找到解决方案,因此我可以检查字符串用户或字符串是否通过!=空 如有任何建议,将不胜感激Java拆分字符串(检查给定参数),java,split,Java,Split,对于Java IRC客户端,我有一个登录功能。如果您键入“!LOGIN user pass”,它将让您登录 现在,如果用户使用空间过多或仅使用1个参数而不是“user”+“pass”,那么由于我拆分行的方式,程序将崩溃 我很难找到解决方案,因此我可以检查字符串用户或字符串是否通过!=空 如有任何建议,将不胜感激 if (line.contains("!LOGIN")){ //!LOGIN username password String[] parts = line.split(" ");
if (line.contains("!LOGIN")){ //!LOGIN username password
String[] parts = line.split(" ");
String user = parts[4];
String pass = parts[5];
}
按照上面注释中的说明使用正则表达式,然后检查数组的大小。通常建议在解析输入之前验证输入,或者测试解析是否有效 在这种情况下,您是在字符串上拆分的,这并没有给您任何确定性 您至少应该测试是否有足够的块:
String[] parts = line.split(" ");
if (parts.length >= 5) {
// your usual logic
String user = parts[4];
String pass = parts[5];
}
但通常最好创建一个(严格地)定义可接受输入的模式。首先验证提供的输入是否与预期模式匹配。(在你的模式中,你决定要多宽大)
您也可以使用错误的输入进行测试,例如:
public static String[] inputFailed = new String[] {
"",
"! LOGIN user pass",
"!LOGINX user pass",
"!LOGIN user pass other",
"!LOGIN userpass"
};
您可以先检查类似的部分[4]和部分[5]是否不为空。请使用正则表达式,
\\s+
而不是”
(请注意,split
接受正则表达式,而不是字符串)。让它正常工作,谢谢!
something like:
public class TestPattern {
public static String[] inputTest = new String[] {
"!LOGIN user pass",
"!LOGIN user pass ",
"!LOGIN user pass",
"!LOGIN user pass",
" !LOGIN user pass",
" !LOGIN user pass "
};
public static void main(String[] argv) {
// ^ = start of line
// \\s* = 0 or more spaces
// \\s+ = 1 or more spaces
// (\\w+) = group 1 containing 1 or more word-characters (a-zA-Z etc)
// $ = end of line
Pattern pattern = Pattern.compile("^\\s*!LOGIN\\s+(\\w+)\\s+(\\w+)\\s*$");
for (String input : inputTest) {
Matcher matcher = pattern.matcher(input);
if (!matcher.find()) {
System.out.println("input didn't match login: " + input);
continue;
}
String username = matcher.group(1);
String password = matcher.group(2);
System.out.println("username[ " + username + " ], password[ " + password + " ]");
}
}
}
public static String[] inputFailed = new String[] {
"",
"! LOGIN user pass",
"!LOGINX user pass",
"!LOGIN user pass other",
"!LOGIN userpass"
};