拆分一行String

时间:2015-04-12 23:26:48

标签: java

我有一个String行,可以是

AND A B C -> D
OR A B -> D
NAND A B C D E -> F
............

如何在没有第一个String令牌(AND,OR,NAND)且没有A B C D的情况下将String行拆分为->并且应该修剪空格?我在这里做过,但它给了我一个输出

or A B C
D

public static void main(String [] args)throws IOException
    {
        String str = "or A B C -> D";
        String[] array = str.split("->");
        String[] leftSide = array[0].trim().split(array[0]);
        String[] rightSide = array[1].trim().split(" ");

        for(int i = 0; i < leftSide.length; i++)
        {
            System.out.println(leftSide[i]);
        }

        for(int i = 0; i < rightSide.length; i++)
        {
            System.out.println(rightSide[i]);
        }
    }

3 个答案:

答案 0 :(得分:2)

        String str = "AND A B C -> D";
        // \\s+ for multiple white spaces  -> is for your request
        StringTokenizer st = new StringTokenizer(str, "\\s+ ->");

        boolean isFirstToken = true;
        while (st.hasMoreTokens()) {
            if (isFirstToken) {
                isFirstToken = false;
                st.nextToken();//For first iteration
                continue;
            }
            System.out.print(st.nextToken() + " ");
        }

答案 1 :(得分:1)

用空格“”拆分字符串,然后遍历生成的数组,删除任何超过1个符号的序列。

    String str = "or A B C -> D";
    String[] array = str.split(" ");
    List<String> list = Arrays.asList(array);
    String currentString;

    for(int i = 0; i < list.size(); i++)
    {
        currentString = list.get(i);

        if(currentString.length() >1) {
             list.remove(currentString);
        }
    }

     System.out.println(list);

答案 2 :(得分:0)

发生了什么事情,你正在分裂“ - &gt;”,给予 “或A B C”和“D”。然后你正在修剪它们,然后特别将它们分开(你自己将左侧分开,右侧分开“”但“D”没有空格可以分开。这样就可以得到你看到的结果。 / p>

你可以定义所有在某个数组中有效的东西然后拆分所有东西,然后只保留有效的东西。

public static final String[] VALUES = new String[] {"A","B","C","D"};
public static void main(String [] args)
{
    String str = "or A B C -> D";
    String[] array = str.split(" ");
    for (int i = 0; i < array.length; i++) {
        if (Arrays.asList(VALUES).contains(array[i])) {
            System.out.print(array[i] + " ");
        }
    }
}

或者,如果对您的应用程序更有意义,您可以反过来这样做 - 定义一个不应包含的术语列表。

public static final String[] EXCLUDE = new String[] {"AND", "OR", "->"};
public static void main(String [] args)
{
    String str = "or A B C -> D";
    String[] array = str.split(" ");
    for (int i = 0; i < array.length; i++) {
        if (!(Arrays.asList(EXCLUDE).contains(array[i]))) {
            System.out.print(array[i] + " ");
        }
    }
}