4

C++ 的“std::string::find_first_of”是否有任何 Java 等价物?

 string string1( "This is a test string!");
 int location = string1.find_first_of( "aeiou" );
 //location is now "2" (the position of "i")

实现相同功能的最简单方法是什么?

编辑:建议的解决方案也必须适用于 Android。

4

4 回答 4

8

不使用外部库:

     String string = "This is a test string!";
     String letters = "aeiou";
     Pattern pattern = Pattern.compile("[" + letters + "]");
     Matcher matcher = pattern.matcher(string);
     int position = -1;
     if (matcher.find()) {
         position = matcher.start();
     }
     System.out.println(position); // prints 2
于 2013-06-28T17:27:17.527 回答
5

不是最有效但最简单的:

String s = "This is a test string!";
String find = "[aeiou]";
String[] tokens = s.split(find);
int index = tokens.length > 1 ? tokens[0].length() : -1; //-1 if not found

注意:find字符串不能包含任何保留的正则表达式字符,例如.*[]等。

于 2013-06-28T17:28:39.897 回答
5

使用番石榴

CharMatcher.anyOf("aeiou").indexIn("This is a test string!");

CharMatcher与 Apache 替代方案相比,您可以更灵活地操作字符类StringUtils,例如提供和等常量CharMatcher.DIGITCharMatcher.WHITESPACE让您对字符类进行补充、联合、相交等...)

于 2013-06-28T17:33:53.460 回答
1

使用 StringUtils.indexOfAny ,这里有一个链接http://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/StringUtils.html

于 2013-06-28T17:24:36.723 回答