2015-04-12 5 views
0

У меня есть ломаная линия, которая может бытьРасщепление линии строки

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

Как я могу разделить строку строку в только A B C D без первой строки маркера (AND, OR, NAND) и без -> и должны обрезать пробелы? Я сделал здесь, но это дает мне выход

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

ответ

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); 
1
 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() + " "); 
     } 
0

Что происходит, вы разделив на «->», давая «или A B C» и «D». Затем вы обрезаете их, а затем раскалываете их ни на что конкретно (вы разделяете левую сторону сами по себе, а правая сторона - на «", но «D» не имеет пробелов для разделения. Это дает вам результаты, которые вы видите.

вы можете просто определить все вещи, которые действительно в некотором массиве, а затем разделить все, то только держать материал, который действует.

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] + " "); 
     } 
    } 
} 
Смежные вопросы