Stringに次のような特殊文字が含まれているかどうかを確認するにはどうすればよいですか?
[,],{,},{,),*,|,:,>,
Pattern p = Pattern.compile("[^a-z0-9 ]", Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher("I am a string");
boolean b = m.find();
if (b)
System.out.println("There is a special character in my string");
次のコードを使用して、文字列から特殊文字を検出できます。
import Java.util.regex.Matcher;
import Java.util.regex.Pattern;
public class DetectSpecial{
public int getSpecialCharacterCount(String s) {
if (s == null || s.trim().isEmpty()) {
System.out.println("Incorrect format of string");
return 0;
}
Pattern p = Pattern.compile("[^A-Za-z0-9]");
Matcher m = p.matcher(s);
// boolean b = m.matches();
boolean b = m.find();
if (b == true)
System.out.println("There is a special character in my string ");
else
System.out.println("There is no special char.");
return 0;
}
}
正規表現[a-zA-Z0-9 ]*
に一致する場合、特殊文字は含まれません。
あなたはまさに「特別なキャラクター」と呼んでいますか? 「英数字ではないもの」のようなものを意味する場合、org.Apache.commons.lang.StringUtilsクラスを使用できます(IsAlpha/IsNumeric/IsWhitespace/IsAsciiPrintableメソッド)。
それほど簡単ではない場合は、受け入れて文字列を照合する正確な文字リストを定義する正規表現を使用できます。
パスワードに文字、特殊文字、数字を8桁以上含める場合は、このコードを使用して、完全に機能します
public static boolean Password_Validation(String password)
{
if(password.length()>=8)
{
Pattern letter = Pattern.compile("[a-zA-z]");
Pattern digit = Pattern.compile("[0-9]");
Pattern special = Pattern.compile ("[!@#$%&*()_+=|<>?{}\\[\\]~-]");
//Pattern eight = Pattern.compile (".{8}");
Matcher hasLetter = letter.matcher(password);
Matcher hasDigit = digit.matcher(password);
Matcher hasSpecial = special.matcher(password);
return hasLetter.find() && hasDigit.find() && hasSpecial.find();
}
else
return false;
}
すべては、「特別な」という意味に正確に依存します。正規表現では、指定できます
後者があなたの言っていることだと思います。ただし、[]リストを使用しない場合は、必要なものを正確に指定してください。
Java.lang.Character
クラスをご覧ください。いくつかのテスト方法があり、ニーズに合ったものを見つけることができます。
例:Character.isSpaceChar(c)
または!Character.isJavaLetter(c)
最初に、チェックする特殊文字を徹底的に識別する必要があります。
次に、正規表現を記述して使用できます
public boolean matches(String regex)
Pattern p = Pattern.compile("[\\p{Alpha}]*[\\p{Punct}][\\p{Alpha}]*");
Matcher m = p.matcher("Afsff%esfsf098");
boolean b = m.matches();
if (b == true)
System.out.println("There is a sp. character in my string");
else
System.out.println("There is no sp. char.");
これは私のために働いた:
String s = "string";
if (Pattern.matches("[a-zA-Z]+", s)) {
System.out.println("clear");
} else {
System.out.println("buzz");
}
文字列内の各文字にアクセスして、その文字が特殊文字のブラックリストに含まれているかどうかを確認します。これはO(n * m)です。
擬似コードは次のとおりです。
for each char in string:
if char in blacklist:
...
ブラックリストを並べ替えることで、各チェックを早期に終了できるようにすることで、複雑さをわずかに改善できます。ただし、文字列検索関数はおそらくネイティブコードであるため、この最適化(Javaバイトコードで行われる)はかなり遅くなる可能性があります。
//正規表現を使用せずに........
String specialCharacters=" !#$%&'()*+,-./:;<=>?@[]^_`{|}~0123456789";
String name="3_ saroj@";
String str2[]=name.split("");
for (int i=0;i<str2.length;i++)
{
if (specialCharacters.contains(str2[i]))
{
System.out.println("true");
//break;
}
else
System.out.println("false");
}
//これは、私が投稿したコードの更新バージョンです/ * isValidNameメソッドは、引数として渡された名前に含める必要があるかどうかを確認します-1.null値またはスペース2.任意の特殊文字3.数字(0-9)説明- -ここで、str2は引数として渡される名前の分割された文字列を格納する文字列配列変数です。count変数は特殊文字の数をカウントします。メソッドはすべての条件を満たしている場合にtrueを返します* /
public boolean isValidName(String name)
{
String specialCharacters=" !#$%&'()*+,-./:;<=>?@[]^_`{|}~0123456789";
String str2[]=name.split("");
int count=0;
for (int i=0;i<str2.length;i++)
{
if (specialCharacters.contains(str2[i]))
{
count++;
}
}
if (name!=null && count==0 )
{
return true;
}
else
{
return false;
}
}
文字列str2 [] = name.split( "");配列に余分な文字を与えます...「Aditya」.split( "")が返す例を説明しましょう[、A、d、i、t、y、a]配列に余分な文字があります。 。
"Aditya" .split( "")は、saroj routrayの期待どおりに機能しません。String=> [、A、d、i、t、y、a]に余分な文字が表示されます。
私はそれを修正しました、以下のコードは期待通りに動作します
public static boolean isValidName(String inputString) {
String specialCharacters = " !#$%&'()*+,-./:;<=>?@[]^_`{|}~0123456789";
String[] strlCharactersArray = new String[inputString.length()];
for (int i = 0; i < inputString.length(); i++) {
strlCharactersArray[i] = Character
.toString(inputString.charAt(i));
}
//now strlCharactersArray[i]=[A, d, i, t, y, a]
int count = 0;
for (int i = 0; i < strlCharactersArray.length; i++) {
if (specialCharacters.contains( strlCharactersArray[i])) {
count++;
}
}
if (inputString != null && count == 0) {
return true;
} else {
return false;
}
}
文字列を小文字のすべての文字を含むchar配列に変換します。
char c[] = str.toLowerCase().toCharArray();
次に、Character.isLetterOrDigit(c[index])
を使用して、どのインデックスに特殊文字が含まれているかを確認できます。