我试图找出我的字符串是否包含从a到z的所有字母
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
s=s.replaceAll("\\s+", "");
System.out.println(s);
// String input = "[a-zA-Z]+";
String input = "\\w+";
System.out.println(input);
Pattern pr = Pattern.compile(input);
Matcher m =pr.matcher(s);
if(m.matches()){
System.out.println("pangram");
} else {
System.out.println("non-pangram");
}
我们可以通过其他方法解决这个问题,但我正在尝试仅使用模式和匹配器来解决它。
我使用了set并将每个字符(ASC)放入其中,因为set只包含唯一的值,所以我检查所有字符的大小==26。使用if(put
Scanner sc = new Scanner(System.in);
String s= sc.nextLine();
Set<Integer> h = new HashSet<Integer>();
for (int i = 0; i < s.length(); i++) {
int put = (int)s.charAt(i);
if(put>=97 && put<=122 ) {
h.add(put);
}
if(put>=65 && put<=90 ) {
h.add(put);
}
}
if(h.size()==52)
System.out.println("all 52");
else
System.out.println("missing");
如果您想查看给定输入字符串中是否存在所有52个大小写字母,则不能使用正则表达式。它根本不能做这样的事情。
如果必须存在的字符列表是动态的,则可以使用此方法:
private static boolean containsAllOf(String input, String alphabet) {
boolean[] found = new boolean[alphabet.length()];
int foundCount = 0;
for (int i = 0; i < input.length(); i++) {
char ch = input.charAt(i);
int idx = alphabet.indexOf(ch);
if (idx >= 0 && ! found[idx]) {
found[idx] = true;
if (++foundCount == found.length)
return true;
}
}
return false;
}
例如。像这样使用它:
containsAllOf("abc", "abcdef") // returns false
containsAllOf("dfu hadkf kojuhoeuaf", "abcdef") // returns false
containsAllOf("bad fed", "abcdef") // returns false
containsAllOf("bad fec", "abcdef") // returns true
如果您特别想检查英语字母表的全部52个大小写字母,则可以提高性能。
private static boolean containsAllOfAlphabet(String input) {
boolean[] found = new boolean[52];
int foundCount = 0;
for (int i = 0; i < input.length(); i++) {
char ch = input.charAt(i);
int idx = (ch >= 'a' && ch <= 'z' ? ch - 'a' :
ch >= 'A' && ch <= 'Z' ? ch - 'A' + 26 : -1);
if (idx >= 0 && ! found[idx]) {
found[idx] = true;
if (++foundCount == found.length)
return true;
}
}
return false;
}
如果要使用模式匹配器,请更新,这里有一种方法。
首先对输入字符串的所有字符进行排序,然后使用模式匹配器消除所有非字母和重复字母。如果结果的长度为52,则所有字母都存在。
当然,pangram通常不会将大小写字母视为不同的,因此调用toLowercase()
并检查长度26可能更正确:
String input = "Pack my box with five dozen liquor jugs.";
char[] buf = input.toLowerCase().toCharArray();
Arrays.sort(buf);
boolean pangram = (new String(buf).replaceAll("[^a-zA-Z]|([a-zA-Z])\\1+", "$1").length() == 26);
System.out.println(pangram ? "pangram" : "non-pangram");
本文向大家介绍C#程序来匹配字符串中的所有数字,包括了C#程序来匹配字符串中的所有数字的使用技巧和注意事项,需要的朋友参考一下 要匹配字符串中的所有数字,请使用C#正则表达式。 首先,设置一个数字字符串- 使用以下正则表达式获取字符串中的数字- 以下是代码- 示例 输出结果
我有一些xml文件,希望删除除特定字符串以外的所有内容。 StackOverflow上还有很多类似的问题,但都不适用于我的文件,在尝试了几个小时不同的正则表达式后,我想寻求帮助。 到目前为止,部分成功但并非完全成功的最接近的正则表达式是: xml文件的示例: 我使用regex101,因此可以将示例粘贴在那里,以了解为什么rex只能部分工作。简而言之,它与第一次出现的不匹配,但与第二次出现的匹配。我
问题内容: 如何替换字符串中所有出现的内容? 如果要替换字符串中的所有换行符(\ n)。 这只会替换第一次出现的换行符 我不知道该怎么做? 问题答案: 使用全局标志。
问题 你想要匹配两个或多个字符串。 解决方案 计算把一个字符串转换成另一个字符串所需的编辑距离或操作数。 levenshtein = (str1, str2) -> l1 = str1.length l2 = str2.length prevDist = [0..l2] nextDist = [0..l2] for i in [1..l1] by 1
本文向大家介绍Python中的DI字符串匹配,包括了Python中的DI字符串匹配的使用技巧和注意事项,需要的朋友参考一下 假设我们有一个仅包含“ I”(表示增加)或“ D”(表示减少)的字符串S,令N = S的大小。我们必须返回[0,1,... ,N]使得对于范围0,...,N-1中的所有i- 如果S [i]为“ I”,则A [i] <A [i + 1] 否则,当S [i]为“ D”时,则A [
所需匹配: 这个regex只匹配字符串第一个实例之后的所有内容: 思想?