Extension of "Detecting a Character" question


Basically the question is answered but i need more...

What i need is to hav a statement that detects if the string has items other than:

any integer, (, ), +, -, / and *.

if any of the above r detected thats ok... anything else is bad

so basically,

if ( not any integer, (, ), +, -, / and *) {
    System.err.println("INVALID");
    System.exit(1);
}
AnthonyCosenzaAsked:
Who is Participating?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

x
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

sudhakar_koundinyaCommented:
String str="Abcd";

if(str.matches("A-Za-z"))
{
//ok
}
else
{
//not ok
}
0
sudhakar_koundinyaCommented:
oops sorry wrong answer
0
AnthonyCosenzaAuthor Commented:
ok, i'm not just worried about characters... i'm worried about things like "#" or "\"

basically any small little piece of text that could cause mischief

Thanks
0
Why Diversity in Tech Matters

Kesha Williams, certified professional and software developer, explores the imbalance of diversity in the world of technology -- especially when it comes to hiring women. She showcases ways she's making a difference ithrough the Colors of STEM program.

sudhakar_koundinyaCommented:
booleab b=str.matches.(", \\(\\ ) \\+\\ - / \\ *");
if(b)
for(int i=0;i<str.length);i++)
{
  if(!Character.isDigit(str.charAt(i)
  {
      b=false;
        break;  
  }

}

if(b)
//ok
else
//not ok
0
AnthonyCosenzaAuthor Commented:
May i ask wat this line is doin??

if(!Character.isDigit(str.charAt(i)

Thanks again
0
sudhakar_koundinyaCommented:
ignore previous one
try this

    if(str.matches("[0-9\\,\\(\\)\\+\\-\\*]+"))
    {
      System.err.println("ok");
    }
    else
    {
              System.err.println("not ok");
    }
0
sudhakar_koundinyaCommented:
missed / character

This works

if(str.matches("[0-9\\,\\(\\)\\+\\-\\*/]+"))
    {
      System.err.println("ok");
    }
    else
    {
              System.err.println("not ok");
    }
0
zzynxSr. Software engineerCommented:
>>May i ask wat this line is doin??
>>if(!Character.isDigit(str.charAt(i)

It checks if the character at position i in the String str is a digit
0
zzynxSr. Software engineerCommented:
Anthony,

I think you want to allow
1) all digits
2) (
3) )
4) +
5) -
6) /
7) *

No commas, right?

Then this is the reg expression:

     if ( !str.matches("[0-9\\(\\)\\+\\-\\*/]+") ) {
        System.err.println("INVALID");
        System.exit(1);
    }

If you want to allow spaces too:  (because now "5 + 6" is invalid)

     if ( !str.matches("[0-9 \\(\\)\\+\\-\\*/]+") ) {
        System.err.println("INVALID");
        System.exit(1);
    }

Remarks:
[1]
This doesn't recognize weird strings like
        String str = "6+*/-5-15*-6"
as invalid.

[2]
All six comments you accepted already are graded with a B.
Is that the maximum grade you'll ever give?
Here at EE, were used to get an A for correct answers/solutions,
a B for answers that helped to find the correct answer/solution and
a C for answers that help a little bit in finding the solution.

Did you know that giving an A-grade doesn't cost *you* any more points than the # originally set, while *we* get more points?
(A=x4, B=x3 and C=x2)
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
AnthonyCosenzaAuthor Commented:
I've only been givin B grades because they are helpful solutions yet they r only parts of a bigger problem...
I had no idea that they affected the points system.

Anyway.. i hav another problem..

I hav something like this

while (st.hasMoreTokens( )) {
    if ( !token.matches("[0-9\\(\\)\\+\\-\\*/]+") ) {
        System.err.println("INVALID EXPRESSION");
        System.exit(1);
    } else {
        System.out.println(token);
        token = st.nextToken( );
    }
}
System.exit(1);

Where i hav a StringTokenizer goin through the string which is in a file...
What happens here is if i hav a expression in the file, for example ( 4 + 3 )..
it prints:

(
4
+
3

.. It doesnt print watever the last item is...

Puzzled..
0
zzynxSr. Software engineerCommented:
Can you show us what StringTokenizer you use?

Remark:
StringTokenizer is a legacy class that is retained for compatibility reasons although its use is discouraged in new code. It is recommended that anyone seeking this functionality use the split method of String or the java.util.regex package instead.

Thanks for accepting
0
sudhakar_koundinyaCommented:
Thanks for points :)

zzynx,
The last question was already answered here http://www.experts-exchange.com/Programming/Programming_Languages/Java/Q_21165896.html by CEHJ  

;-)
0
zzynxSr. Software engineerCommented:
>> The last question was already answered
Always handy to know. ;°)
Thanks sudhakar.
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Java

From novice to tech pro — start learning today.