Check if a String contains a special character

JavaStringSpecial Characters

Java Problem Overview


How do you check if a String contains a special character like:

[,],{,},{,),*,|,:,>,

Java Solutions


Solution 1 - Java

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");

Solution 2 - Java

You can use the following code to detect special character from 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)
        System.out.println("There is a special character in my string ");
     else
         System.out.println("There is no special char.");
     return 0;
 }
}

Solution 3 - Java

If you want to have LETTERS, SPECIAL CHARACTERS and NUMBERS in your password with at least 8 digit, then use this code, it is working perfectly

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;
	
}

Solution 4 - Java

If it matches regex [a-zA-Z0-9 ]* then there is not special characters in it.

Solution 5 - Java

What do you exactly call "special character" ? If you mean something like "anything that is not alphanumeric" you can use org.apache.commons.lang.StringUtils class (methods IsAlpha/IsNumeric/IsWhitespace/IsAsciiPrintable).

If it is not so trivial, you can use a regex that defines the exact character list you accept and match the string against it.

Solution 6 - Java

All depends on exactly what you mean by "special". In a regex you can specify

  • \W to mean non-alpahnumeric
  • \p{Punct} to mean punctuation characters

I suspect that the latter is what you mean. But if not use a [] list to specify exactly what you want.

Solution 7 - Java

Have a look at the java.lang.Character class. It has some test methods and you may find one that fits your needs.

Examples: Character.isSpaceChar(c) or !Character.isJavaLetter(c)

Solution 8 - Java

This is tested in android 7.0 up to android 10.0 and it works

Use this code to check if string contains special character and numbers:

  name = firstname.getText().toString(); //name is the variable that holds the string value

  Pattern special= Pattern.compile("[^a-z0-9 ]", Pattern.CASE_INSENSITIVE);
  Pattern number = Pattern.compile("[0-9]", Pattern.CASE_INSENSITIVE);
  Matcher matcher = special.matcher(name);
  Matcher matcherNumber = number.matcher(name);
  
  boolean constainsSymbols = matcher.find();
  boolean containsNumber = matcherNumber.find();

  if(constainsSymbols == true){
   //string contains special symbol/character
  }
  else if(containsNumber == true){
   //string contains numbers
  }
  else{
   //string doesn't contain special characters or numbers
  }

Solution 9 - Java

This worked for me:

String s = "string";
if (Pattern.matches("[a-zA-Z]+", s)) {
 System.out.println("clear");
} else {
 System.out.println("buzz");
}

Solution 10 - Java

First you have to exhaustively identify the special characters that you want to check.

Then you can write a regular expression and use

public boolean matches(String regex)

Solution 11 - Java

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.");

Solution 12 - Java

//without using regular expression........

	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");
	}

Solution 13 - Java

//this is updated version of code that i posted /* The isValidName Method will check whether the name passed as argument should not contain- 1.null value or space 2.any special character 3.Digits (0-9) Explanation--- Here str2 is String array variable which stores the the splited string of name that is passed as argument The count variable will count the number of special character occurs The method will return true if it satisfy all the condition */

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;
	}
}
	

Solution 14 - Java

Visit each character in the string to see if that character is in a blacklist of special characters; this is O(n*m).

The pseudo-code is:

for each char in string:
  if char in blacklist:
    ...

The complexity can be slightly improved by sorting the blacklist so that you can early-exit each check. However, the string find function is probably native code, so this optimisation - which would be in Java byte-code - could well be slower.

Solution 15 - Java

in the line String str2[]=name.split(""); give an extra character in Array... Let me explain by example "Aditya".split("") would return [, A, d,i,t,y,a] You will have a extra character in your Array... The "Aditya".split("") does not work as expected by saroj routray you will get an extra character in String => [, A, d,i,t,y,a].

I have modified it,see below code it work as expected

 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;
    }
}

Solution 16 - Java

Convert the string into char array with all the letters in lower case:

char c[] = str.toLowerCase().toCharArray();

Then you can use Character.isLetterOrDigit(c[index]) to find out which index has special characters.

Solution 17 - Java

Use java.util.regex.Pattern class's static method matches(regex, String obj)
regex : characters in lower and upper case & digits between 0-9
String obj : String object you want to check either it contain special character or not.

It returns boolean value true if only contain characters and numbers, otherwise returns boolean value false

Example.

String isin = "12GBIU34RT12";<br>
if(Pattern.matches("[a-zA-Z0-9]+", isin)<br>{<br>
   &nbsp; &nbsp; &nbsp; &nbsp;System.out.println("Valid isin");<br>
}else{<br>
   &nbsp; &nbsp; &nbsp; &nbsp;System.out.println("Invalid isin");<br>
}

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionblueView Question on Stackoverflow
Solution 1 - Javaoliver31View Answer on Stackoverflow
Solution 2 - JavaAshish SharmaView Answer on Stackoverflow
Solution 3 - JavaPir Fahim ShahView Answer on Stackoverflow
Solution 4 - JavafastcodejavaView Answer on Stackoverflow
Solution 5 - JavaMichael ZilbermannView Answer on Stackoverflow
Solution 6 - JavadjnaView Answer on Stackoverflow
Solution 7 - JavaAndreas DolkView Answer on Stackoverflow
Solution 8 - JavaJeanne vieView Answer on Stackoverflow
Solution 9 - JavaAntroidView Answer on Stackoverflow
Solution 10 - JavaVarunView Answer on Stackoverflow
Solution 11 - JavaBhushanView Answer on Stackoverflow
Solution 12 - Javasaroj routrayView Answer on Stackoverflow
Solution 13 - Javasaroj routrayView Answer on Stackoverflow
Solution 14 - JavaWillView Answer on Stackoverflow
Solution 15 - Javauser4423251View Answer on Stackoverflow
Solution 16 - JavaRajView Answer on Stackoverflow
Solution 17 - JavaSuraj MahliView Answer on Stackoverflow