如何在Java中使用正则表达式有效地从给定字符串中提取不匹配的字符
我有一个要求,即我应该验证给定字符串,并且我应该从该字符串中提取任何不匹配的字符(如果存在) 如果字符串具有任意组合和任意序列,则认为该字符串有效 a-z a-z 0-9-/?:(),'+CR-LF空格 我使用正则表达式来进行验证 ^[a-zA-Z0-9/?:(),'+\r\n-]如何在Java中使用正则表达式有效地从给定字符串中提取不匹配的字符,java,regex,string,Java,Regex,String,我有一个要求,即我应该验证给定字符串,并且我应该从该字符串中提取任何不匹配的字符(如果存在) 如果字符串具有任意组合和任意序列,则认为该字符串有效 a-z a-z 0-9-/?:(),'+CR-LF空格 我使用正则表达式来进行验证 ^[a-zA-Z0-9/?:(),'+\r\n-] public class RegEx { public static void main(String[] args) { String textToValidate="(+aBcD23456
public class RegEx {
public static void main(String[] args) {
String textToValidate="(+aBcD23456 lkmsdklm 1dfr435f:/?,.' \r\n)";
Set<Character> failedCharacter = getUnMatchedCharacter(textToValidate);
if(failedCharacter.isEmpty()){
System.out.println("Valid String");
}
else{
System.out.println("Given String contains invalid characters "+failedCharacter);
}
}
public static Set<Character> getUnMatchedCharacter(String textToValidate){
Set<Character> failedCharacter = new LinkedHashSet<Character>();
Pattern regexPattern = Pattern.compile("^[a-zA-Z0-9/?:().,'+\r\n -]");
char[] charArray = textToValidate.toCharArray();
for (char character : charArray) {
Matcher result = regexPattern.matcher(String.valueOf(character));
if(!result.matches()){
failedCharacter.add(character);
}
}
return failedCharacter;
}
}
公共类正则表达式{
公共静态void main(字符串[]args){
字符串textToValidate=“(+aBcD23456 lkmsdklm 1dfr435f:/?,。\r\n)”;
设置failedCharacter=getUnMatchedCharacter(textToValidate);
if(failedCharacter.isEmpty()){
System.out.println(“有效字符串”);
}
否则{
System.out.println(“给定字符串包含无效字符”+failedCharacter);
}
}
公共静态集getUnMatchedCharacter(字符串textToValidate){
Set failedCharacter=new LinkedHashSet();
Pattern regexpatern=Pattern.compile(“^[a-zA-Z0-9/?:(),”+\r\n-]);
char[]charArray=textToValidate.toCharArray();
for(字符:charArray){
匹配器结果=regexpatern.Matcher(String.valueOf(character));
如果(!result.matches()){
失败字符。添加(字符);
}
}
返回失败字符;
}
}
例外输出如下所示
- 阳性病例
- 输入:textToValidate=“(+aBcD23456 lkmsdklm 1dfr435f:/?,“\r\n)”李>
- 输出:有效字符串
- 阴性病例
- 输入:textToValidate=“(+aBcD23456&*^%$#@!lkmsdklm 1dfr435f:/?,。\r\n)”李>
- 输出:给定字符串包含无效字符[&、*、^、%、$、#、@、!]
关于如何改进上述代码的任何建议,或者是否有其他方法可以使用Java中的正则表达式从给定字符串中有效提取不匹配的字符 这里有一个简单的函数,可以给出您想要的结果
private String validateString(String s){
ArrayList invalidChars = new ArrayList();
char[] ch = s.toCharArray();
String output = "";
for(int i = 0; i < s.length(); i++){
if((Character.isLetter(ch[i]) || Character.isDigit(ch[i]))){
output += ch[i];
}else invalidChars.add(ch[i]);
}
if(invalidChars.size() > 0) return "Given String contains invalid characters: " + invalidChars.toString();
else return "Given string is valid: " + output;
}
私有字符串验证字符串(字符串s){
ArrayList invalidChars=新的ArrayList();
char[]ch=s.toCharArray();
字符串输出=”;
对于(int i=0;i0)返回“给定字符串包含无效字符:”+invalidChars.toString();
否则返回“给定字符串有效:”+输出;
}
使用
validateString(“abc123!#”)代码>
会回来的
“给定字符串包含无效字符:[!,@,#]
添加+
量词和字符串锚点的结尾$
。或者使用否定模式来查找是否有不允许的字符。另外,在java字符串模式中,必须使用转义反斜杠。@Casimir et Hipolyte:你能给出一些如何执行的示例吗?我试过使用正则表达式门控模式。但是,不幸的是,它对我没有什么作用。我还使用了^[a-zA-Z0-9/?:(),“+\r\n-]+$”正如您前面提到的,但我没有得到所需的结果output@Soleil,看我的答案,它提供了一个简单的方法来实现你想要的。那么我在帖子-/?:()中提到的特殊角色呢。,“+CR LF空白字符.isleter()&Character.isDigit()将允许来自具有unicode表示形式的其他语言的字符。我的要求是只允许a-zA-Z0-9-/?:(),“+CR LF空格