如果代码是这样的
const char str1[] = "abcde2fghi3jk4l";
const char str2[] = "34";
char *ret;
ret = strpbrk(str1, str2);
我应该如何在Java中复制它?
答案 0 :(得分:1)
java中没有直接的等价物。
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();
}