Java, Make sure a String contains only alphanumeric, spaces and dashes

17,447

Solution 1

Hum... just program it yourself using String.chatAt(int), it's pretty easy...

Iterate through all char in the string using a position index, then compare it using the fact that ASCII characters 0 to 9, a to z and A to Z use consecutive codes, so you only need to check that character x numerically verifies one of the conditions:

  • between '0' and '9'
  • between 'a' and 'z'
  • between 'A and 'Z'
  • a space ' '
  • a hyphen '-'

Here is a basic code sample (using CharSequence, which lets you pass a String but also a StringBuilder as arg):

public boolean isValidChar(CharSequence seq) {
    int len = seq.length();
    for(int i=0;i<len;i++) {
        char c = seq.charAt(i);
        // Test for all positive cases
        if('0'<=c && c<='9') continue;
        if('a'<=c && c<='z') continue;
        if('A'<=c && c<='Z') continue;
        if(c==' ') continue;
        if(c=='-') continue;
        // ... insert more positive character tests here
        // If we get here, we had an invalid char, fail right away
        return false;
    }
    // All seen chars were valid, succeed
    return true;
}

Solution 2

You could use:

StringUtils.isAlphanumericSpace(string.replace('-', ' '));

Solution 3

Just iterate through the string, using the character-class methods in java.lang.Character to test whether each character is acceptable or not. Which is presumably all that the StringUtils methods do, and regular expressions are just a way of driving a generalised engine to do much the same.

Solution 4

You have 1 of 2 options: 1. Compose a list of chars that CAN be in the string, then loop over the string checking to make sure each character IS in the list. 2. Compose a list of chars that CANNOT be in the string, then loop over the string checking to make sure each character IS NOT in the list.

Choose whatever option is quicker to compose the list.

Share:
17,447
Lancelot
Author by

Lancelot

Software Engineer with experience in Node.js, C#, Java

Updated on June 06, 2022

Comments

  • Lancelot
    Lancelot almost 2 years

    In Java, I need to make sure a String only contains alphanumeric, space and dash characters.

    I found the class org.apache.commons.lang.StringUtils and the almost adequate method isAlphanumericSpace(String)... but I also need to include dashes.

    What is the best way to do this? I don't want to use Regular Expressions.