【发布时间】:2014-06-02 07:31:20
【问题描述】:
我正在尝试创建一个拆分方法,将从输入文件中读取的行拆分为我返回的字符串数组。问题是当我发送诸如
之类的行时(;世界 2013/05 // 结束
我想打印出来
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;
}
【问题讨论】:
-
能否提供一个
main方法以便我们轻松测试?
标签: java if-statement for-loop arraylist lexer