Java中是否有strpbrk等价物?以及如何使用它?

时间:2018-05-23 15:31:01

标签: java c string

如果代码是这样的

const char str1[] = "abcde2fghi3jk4l";
const char str2[] = "34";
char *ret;
ret = strpbrk(str1, str2);

我应该如何在Java中复制它?

4 个答案:

答案 0 :(得分:1)

java中没有直接的等价物。

一种可能的解决方案是使用PatternMatcher

java.util.regex.Pattern
java.util.regex.Matcher

var str1 = "abcde2fghi3jk4l";
var str2 = Pattern.quote("34");

Matcher m = Pattern.compile("["+str2+"]").matcher(str1);
if ( m.find() )
  return m.start();
return -1;

答案 1 :(得分:1)

首先,Java不是C,它没有与C一样的指针。

我能想到的最接近你的代码的是:

final String str1 = "abcde2fghi3jk4l";
final String str2 = "34";
StringTokenizer st = new StringTokenizer(str1, str2);
String ret = st.hasMoreTokens() ? str1.substring(st.nextToken().length()) : null;

此代码使用JRE附带的java.util.StringTokenizer

您可以自己尝试here

答案 2 :(得分:1)

有这个功能: firebase.database().ref('channels/').orderByKey().limitToLast(1).once('value').then(function (snapshot) { snapshot.forEach(function(childSnapshot) { const channel = childSnapshot.key; // ... }); //.............. 将返回StringUtils.indexOfAny(String str, String searchChars)中第一个匹配字符的索引。希望这是你想要的。 这是一种非常昂贵的方法,看看你是否可以使用更好的方法。

依赖关系为searchChars

答案 3 :(得分:0)

使用标准API没有直接的等价物。

第一个解决方案:使用Apache StringUtils library: indexOfAny()

ret = StringUtils.indexOfAny(str2,str1.toCharArray());

第二个解决方案:使用标准的Java 8 API,这是非常详细的

    String str1 = "abcde2fghi3jk4l";
    String str2 = "34";
    OptionalInt ret = str2.chars().map(c -> str1.indexOf(c)).min();

第三个解决方案:使用正则表达式,但str1不应该包含任何正则表达式特殊字符,所以我不推荐它...

Matcher matcher = str2.matcher("["+str1+"]");
if(matcher.find()){
    ret = matcher.start();
}