我正在尝试创建一个 split 方法,将从输入文件中读取的行拆分为我返回的字符串数组。问题是当我发送诸如
之类的行时(;world 2013/05 // end
我想要打印出来
String in position 0: (
String in position 1: ;
String in position 2: world
String in position 3: 2013
String in position 4: /
String in position 5: 05
String in position 6: /
String in position 7: /
String in position 8: end
忽略空格。然而,目前它正在打印
String in position 0:
String in position 1: (
String in position 2:
String in position 3: ;
String in position 4: world
String in position 5: 2013
String in position 6: /
String in position 7: 05
String in position 8:
String in position 9: /
String in position 10:
String in position 11: /
String in position 12:
String in position 13: end
我不明白为什么我的数组列表中添加了额外的空格。如果我使用 isOperator 方法中的任何其他运算符,则会发生相同的错误,例如:+, -, *
这是 split 方法的代码。
private static String[] split(String line) {
String temp = ""; //var to store each line from input temporarily
boolean flag = false; //var to check if "\" is in the from input
char[] lineCharArray = line.toCharArray(); //transforms line into array of chars
List<String> array = new ArrayList<String>(); //ArrayList to store the split strings temporarily
for (int i = 0; i<line.length(); i++){
if (!isDelimiter(lineCharArray[i]) && !isOperator(lineCharArray[i])){
temp += lineCharArray[i];
} else {
array.add(temp);
temp = "";
if (isDelimiter(lineCharArray[i])) {
if (lineCharArray[i] == ' ') {
continue;
}
array.add( String.valueOf(lineCharArray[i]));
}
if (isOperator(lineCharArray[i])) {
array.add( String.valueOf(lineCharArray[i]));
}
}
}
array.add(temp);
String [] strings = new String[array.size()]; //Dynamic allocation of array strings
array.toArray( strings );
for (int i = 0; i<strings.length; i++) {
System.out.println("String in position " + i + ": " + strings[i]);
}
return strings;
}
private static boolean isDelimiter(char c) {
char [] delimiters = {':', ';', ' ', '}','{', '[',']','(',')',','};
for (int x=0; x<delimiters.length; x++) {
if (c == delimiters[x]) return true;
}
return false;
}
private static boolean isOperator(char o) {
char [] operators = {'+', '-', '*','/', '%','<','>','=','!','&','|'};
for (int x=0; x<operators.length; x++) {
if (o == operators[x]) return true;
}
return false;
}
最佳答案
基本问题是 temp
可以为空(一开始就是空的)
所以虽然...
if (!isDelimiter(lineCharArray[i]) && !isOperator(lineCharArray[i])) {
等于 false
,您不断向 List
添加空的 temp
值。
要修复此问题,您可以在添加之前检查 temp
是否为空...
} else {
if (!temp.isEmpty()) {
array.add(temp);
temp = "";
}
您还缺少' '
deilimitere
char[] delimiters = {':', ';', '}', '{', '[', ']', '(', ')', ',', ' '};
Missing me ---------------^
我认为 your previous post 中提到了这一点
所以,经过这几次更改,我得到了这个输出
String in position 0: (
String in position 1: ;
String in position 2: world
String in position 3: 2013
String in position 4: /
String in position 5: 05
String in position 6: /
String in position 7: /
String in position 8: end
这是使用调试器的基本过程,因此您可以实时查看代码的执行情况并查看变量的实际情况。
关于Java:使用 split 方法添加时,字符串数组列表中出现额外的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23989369/