Java:我的split方法有问题
我试图创建一个split方法,将从输入文件中读入的一行拆分为返回的字符串数组。问题是,当我通过for循环发送诸如“ho;hi hello”之类的行时,它总是在第一个分隔符或“Java:我的split方法有问题,java,arrays,if-statement,for-loop,lexer,Java,Arrays,If Statement,For Loop,Lexer,我试图创建一个split方法,将从输入文件中读入的一行拆分为返回的字符串数组。问题是,当我通过for循环发送诸如“ho;hi hello”之类的行时,它总是在第一个分隔符或“”;“或第一个运算符(如“”+”)之后停止。我不确定它为什么这样做,因为我希望它一直迭代到行尾,这意味着在if语句之后,for循环再次迭代,直到I
”;“
或第一个运算符(如“”+”
)之后停止。我不确定它为什么这样做,因为我希望它一直迭代到行尾,这意味着在if语句之后,for循环再次迭代,直到I
我想把它打印出来
This is the string in location 0: ho
This is the string in location 1: ;
This is the string in location 2: hi
This is the string in location 3: hello
目前它只是打印出来的
This is the string in location 0: ho
This is the string in location 1: ;
始终在第一个分隔符或运算符处停止。下面是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]) && flag==false){
//System.out.println(lineCharArray[i]);
temp += lineCharArray[i];
} else {
array.add(temp);
if (isDelimiter(lineCharArray[i])) {
array.add( String.valueOf(lineCharArray[i]));
}
if (isOperator(lineCharArray[i])) {
array.add( String.valueOf(lineCharArray[i]));
}
}
}
String [] strings = new String[array.size()]; //string that is returned for lexical analysis
array.toArray( strings );
for (int i = 0; i<strings.length; i++) {
System.out.println("This is the string in location " + 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=”“;//临时存储输入中的每一行的var
boolean flag=false;//检查from输入中是否有“\”的var
char[]lineCharArray=line.toCharArray();//将行转换为字符数组
List array=new ArrayList();//临时存储拆分字符串的ArrayList
对于(int i=0;i您没有将“”作为分隔符。此外,在将临时值添加到数组后,您需要将其重置为“”。我在此处发现了3个问题
空格不是分隔符,因此预期输出为:
This is the string in location 0: ho
This is the string in location 1: ;
This is the string in location 2: hi hello
在添加任何新字符之前,需要重置temp
。最好使用StringBuffer
或StringBuilder
您还需要将lasttemp
添加到数组中
这里我为
循环提供修改后的:
for (int i = 0; i<line.length(); i++){
if (!isDelimiter(lineCharArray[i]) && !isOperator(lineCharArray[i]) && flag==false){
//System.out.println(lineCharArray[i]);
temp += lineCharArray[i];
} else {
array.add(temp);
// Resetting temp variable.
temp = "";
if (isDelimiter(lineCharArray[i])) {
array.add( String.valueOf(lineCharArray[i]));
}
if (isOperator(lineCharArray[i])) {
array.add( String.valueOf(lineCharArray[i]));
}
}
}
// Adding last temp to the array.
array.add(temp);
for(inti=0;我为什么不能在;
上拆分?谢谢,这真的很有帮助!
for (int i = 0; i<line.length(); i++){
if (!isDelimiter(lineCharArray[i]) && !isOperator(lineCharArray[i]) && flag==false){
//System.out.println(lineCharArray[i]);
temp += lineCharArray[i];
} else {
array.add(temp);
// Resetting temp variable.
temp = "";
if (isDelimiter(lineCharArray[i])) {
array.add( String.valueOf(lineCharArray[i]));
}
if (isOperator(lineCharArray[i])) {
array.add( String.valueOf(lineCharArray[i]));
}
}
}
// Adding last temp to the array.
array.add(temp);