Harry Hartley
Harry Hartley

Reputation: 85

Java check all characters in string are present in a given string array

I am attempting to create a method that checks every character in userInput to see if they are present in operatorsAndOperands. The issue is that tempbool is always false for all values.

import java.util.*;

public class stringCalculator
{
private String userInput = null;
String[] operatorsAndOperands = {"1","2","3","4","5","6","7","8","9","0","+","-","*","/"};

public stringCalculator(String newInput)
{
    userInput = newInput;
}

public boolean checkInput()
{
    boolean ifExists = true;
    for(int i=0; i<userInput.length(); i++)
    {
        char currentChar = userInput.charAt(i);
        boolean tempbool = Arrays.asList(operatorsAndOperands).contains(currentChar);
        if (tempbool == false)
        {
            ifExists = false;
        }
    }
    return ifExists;
}
}

Upvotes: 1

Views: 2728

Answers (4)

Joe Attardi
Joe Attardi

Reputation: 4521

As has been pointed out, the issue is that you're checking for a char in a list of String objects, so you'll never find it.

You can make this check easier, though, by using a regular expression:

Pattern operatorsAndOperands = Pattern.compile("[0-9+\\-*/]");

Upvotes: 0

GabrielBB
GabrielBB

Reputation: 2679

Declare: char[] operatorsAndOperands; instead of: String[] operatorsAndOperands.

Or add this: String.valueOf(charToCompare) as the "contains" argument.

Upvotes: 0

Amir Afghani
Amir Afghani

Reputation: 38531

Why don't you declare

String[] operatorsAndOperands = {"1","2","3","4","5","6","7","8","9","0","+","-","*","/"};

as a String, instead of an array of String. Then you can just use the contains method to check the characters against the valid operators.

Upvotes: 1

Sergey Kalinichenko
Sergey Kalinichenko

Reputation: 726579

This is because you have an array of string objects (which you later convert to a list of string objects), but you are checking a char for presence in that array.

Efficiency is also pretty poor here - converting a fixed array to a list on each iteration takes a lot of unnecessary CPU cycles.

A simple solution to this problem is to put all characters in a string, and then check each incoming character against that string:

if ("0123456789+-*/".indexOf(currentChar) >= 0) {
    ... // Good character
}

Another solution would be making a regex that allows only your characters to be specified, like this:

if (expr.replaceAll("[0-9+/*-]*", "").length() == 0) {
    ... // Expr contains only valid characters
}

Upvotes: 2

Related Questions