在一个数组中检查字符串是否以某个字符开头。

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

有没有一种方法可以检查输入字符串是否以方向中的一个值开头,而不使用分割输入值的方式?
4个回答

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

这个流的性能与 DIRECTIONS.contains(input.split(" ")[0]) 相比如何?因为我需要在大循环中使用它。 - Viet
@Jerry06:我本来期望流速会更快一些,但实际上,在考虑性能问题时,你应该有具体的需求,并对其进行测试。 - Jon Skeet

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接