Как разделить или токенизировать строку, только когда 2 разделителя присутствуют вместе (рядом друг с другом) - PullRequest
0 голосов
/ 03 мая 2019

Я читаю по строкам, и мне нужно разделить каждую строку, когда присутствует разделитель ; (точка с запятой + пробел).Каждая строка выглядит следующим образом: s1;s2 s3;s4.Я хочу разбить эту строку, где существует ; (точка с запятой + пробел).Я хочу разделить только там, где точка с запятой и пробел находятся рядом друг с другом, где пробел следует за точкой с запятой.

Как бы я это сделал, используя StringTokenizer?

Я уже пробовал split (";") но это разбивает строку при каждом появлении пробела.

Я также пробовал новый StringTokenizer (strLine," \ s *; \ s + "), но это разбивает при каждом появлении 's'.

String[] parsedStr = inputString.split(...);

StringTokenizer st = new StringTokenizer(...);

Я ожидаю, что результат будет:

("s1","s2 s3","s4") Every token should be an element within this array.

НЕ

("s1"," s2 s3"," s4") 

NOR

("s1","s2","s3","s4")

Ответы [ 3 ]

0 голосов
/ 03 мая 2019

Вы можете использовать регулярные выражения с "\\s*;\\s+". Это удалит все начальные или конечные пробелы. Также требует ';' должен сопровождаться по крайней мере 1 пробелом.

        String inputString = "s1; s2 s3; s4;s5";
        String[] parsedStr = inputString.split("\\s*;\\s+");

        System.out.print(Arrays.asList(parsedStr)); // ["s1", "s2 s3", "s4;s5"]

Edit:

Если вам нужно разделить точку с запятой и указать один пробел и оставить остальные пробелы, вы можете изменить приведенное выше решение следующим образом:

        String inputString = "s1; s2 s3; s4;s5; s6;  s7;";
        String[] parsedStr = inputString.split(";\\s{1}");

        System.out.print(Arrays.asList(parsedStr)); // ["s1", "s2 s3", "s4;s5", "s6", " s7;"]
0 голосов
/ 03 мая 2019

Как и в предыдущем вопросе, решение будет таким, как показано ниже:

   public class Split {
    public static void main(String[] args) {
        String inputString = "s1; s2 s3; s4;s5";
        String[] parsedStr = inputString.split("; | |;");
        System.out.print(Arrays.asList(parsedStr));
    } }

Поскольку вы отредактировали формулировку проблемы, решение будет простым, например:

inputString.split("; ");
0 голосов
/ 03 мая 2019
public static void main(String [] args){
 java.util.Scanner input=new java.util.Scanner
                        ("s1; s2 s3; s4").useDelimiter("\\s*; \\s*");

       while(input.hasNext())
       {
       System.out.print(input.next()+",");
       }
  input.close();
}
...