如何检查字符串是否仅包含一个特定字符? 例如:
在字符串square/retrofit
和square/retrofit/issues
上,我需要检查字符串是否有多个/
字符。
square/retrofit/issues
必须为假,因为必须有多个/
个字符,而square/retrofit
必须为真。
字符串可以有数字。
答案 0 :(得分:2)
您不需要正则表达式。简单的indexOf
和lastIndexOf
方法就足够了。
boolean onlyOne = s.indexOf('/') == s.lastIndexOf('/');
编辑1
当然,如果/
没有出现在给定的字符串中,则将是true
。因此,为避免这种情况,您还可以检查从这些方法之一返回的索引。
编辑2
工作解决方案:
class Strings {
public static boolean availableOnlyOnce(String source, char c) {
if (source == null || source.isEmpty()) {
return false;
}
int indexOf = source.indexOf(c);
return (indexOf == source.lastIndexOf(c)) && indexOf != -1;
}
}
测试用例:
System.out.println(Strings.availableOnlyOnce("path", '/'));
System.out.println(Strings.availableOnlyOnce("path/path1", '/'));
System.out.println(Strings.availableOnlyOnce("path/path1/path2", '/'));
打印:
false
true
false
答案 1 :(得分:0)
或者如果您想对流使用更现代的方法:
boolean occursOnlyOnce(String stringToCheck, char charToMatch) {
return stringToCheck.chars().filter(ch -> ch == charToMatch).count() == 1;
}
免责声明:这不是最佳方法。
更加优化的方法:
boolean occursOnlyOnce(String stringToCheck, char charToMatch) {
boolean isFound = false;
for (char ch : stringToCheck.toCharArray()) {
if (ch == charToMatch) {
if (!isFound) {
isFound = true;
} else {
return false; // More than once, return immediately
}
}
}
return isFound; // Not found
}