空格上的令牌字符串,除非引号之间

时间:2014-03-31 11:34:58

标签: java regex

我正在尝试解析空格上的输入并将这些标记放入数组中。但是引用字符串作为一个单词。例如,假设输入为:

dsas r2r "this is a sentence" asd

和数组元素应该是:

array[0]="dsas"
array[1]="r2r"
array[2]="this is a sentence"
array[3]="asd"

为了解决这个问题,我使用了split方法,但它对我没有帮助

   String input1=input.nextLine();
   input1=input1.trim();
   String delims="[ \"]+";
   String[] array=input1.split(delims);

如何解决此问题?我必须把令牌放到一个数组中,我不得不使用arraylist。

1 个答案:

答案 0 :(得分:0)

你可以试试这个。请注意,我快速写了这段代码,可能包含bug。我使用ArrayList来存储短语(因为时间紧张!)你可以轻松地使用数组(String [])。

    String input1="dsas r2r   \"this is a sentence\"   asd";
       input1=input1.trim();
       char[] charArray = input1.toCharArray();
       String word = "";
       List<String> strList = new ArrayList<>();
       boolean skipAll = false;
       for(char tempChar : charArray) {
           if( tempChar == '"') {
               skipAll = !skipAll;
           } 
           if( tempChar != ' ' && !skipAll) {
               word += tempChar;  
           } else if( tempChar == ' ' && word.length() > 0 && !skipAll) {
               strList.add(word);
               word = "";
           } else if(skipAll) {
               word += tempChar;
           }
       }
       if(word.length() > 0)
           strList.add(word);

       System.out.println(strList);