仅当两个定界符同时存在(彼此相邻)时,才如何拆分或标记字符串

时间:2019-05-03 04:43:40

标签: java split delimiter stringtokenizer

我正在逐行阅读,当出现定界符;(分号+空格)时,我需要将每一行分开。每行如下:s1; s2 s3; s4。我想在存在;(分号+空格)的地方分割这行。我只想在分号和空格彼此相邻的地方(空格在分号之后)进行拆分。

我如何使用StringTokenizer做到这一点?

我已经尝试过split(“;”),但这在每次出现空格时都会拆分String。

我还尝试了新的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 :(得分:0)

您可以将正则表达式与"\\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"]

编辑:

如果需要用分号分隔,并精确保留一个空格,并保留其他空格,则可以按以下方式修改上述解决方案:

        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;"]

答案 1 :(得分:0)

根据您先前的问题,解决方案如下:

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

答案 2 :(得分:-1)

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