2016-01-25 2 views

ответ

7

Конечно - просто итерация по всем направлениям:

private static final String[] DIRECTIONS = {"UP","DOWN","RIGHT","LEFT"}; 

public static String getDirectionPrefix(String input) { 
    for (String direction : DIRECTIONS) { 
     if (input.startsWith(direction)) { 
      return direction; 
     } 
    } 
    return null; 
} 

Или с помощью Java-8 в потоках:

private static final List<String> DIRECTIONS = Arrays.asList("UP","DOWN","RIGHT","LEFT"); 

public static Optional<String> getDirectionPrefix(String input) { 
    return DIRECTIONS.stream().filter(d -> input.startsWith(d)).findFirst(); 
} 
+0

Что такое производительность этого потока и DIRECTIONS.contains (input.split ("") [0])? потому что мне нужно использовать его в большом цикле – Jerry06

+0

@ Jerry06: я бы ожидал, что поток будет быстрее - но на самом деле для проблем с производительностью вы должны иметь конкретные требования, а затем протестировать их. –

1

перебирать массив строк и использовать String startsWith функции.

public static void main(String[] args) { 
     String[] directions = { "UP", "DOWN", "RIGHT", "LEFT" }; 
     String input = "DOWN 123 test"; 

     for (String s : directions) { 
      if (input.startsWith(s)) { 
       System.out.println("Yes - "+s); 
       break; 
      } else { 
       System.out.println("no - "+s); 
      } 
     } 
    } 

выход

no - UP 
Yes - DOWN 
1

В вашем случае вы должны перебрать свой массив и использовать метод String.startsWith().

for(String direction : directions) { 
    if(input.startsWith(direction) { 
     // Do something 
    } 
} 
0

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

 String[] directions = {"UP","DOWN","RIGHT","LEFT"}; 
String input = "DOWN 123 test"; 

for(String dir:directions){ 
    if(input.startsWith(dir)){ 
     System.out.println("input string starts with:"+dir); 
    } 
}