Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:我的split方法有问题_Java_Arrays_If Statement_For Loop_Lexer - Fatal编程技术网

Java:我的split方法有问题

Java:我的split方法有问题,java,arrays,if-statement,for-loop,lexer,Java,Arrays,If Statement,For Loop,Lexer,我试图创建一个split方法,将从输入文件中读入的一行拆分为返回的字符串数组。问题是,当我通过for循环发送诸如“ho;hi hello”之类的行时,它总是在第一个分隔符或“”;“或第一个运算符(如“”+”)之后停止。我不确定它为什么这样做,因为我希望它一直迭代到行尾,这意味着在if语句之后,for循环再次迭代,直到I

我试图创建一个split方法,将从输入文件中读入的一行拆分为返回的字符串数组。问题是,当我通过for循环发送诸如“ho;hi hello”之类的行时,它总是在第一个分隔符或“
”;“
或第一个运算符(如“
”+”
)之后停止。我不确定它为什么这样做,因为我希望它一直迭代到行尾,这意味着在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

  • 您还需要将last
    temp
    添加到数组中

  • 这里我为
    循环提供修改后的

    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);