简体   繁体   中英

(Java ) problems with myString.charAt(i) > “1” or myString.charAt(i) < “A”

I have a car Object which is supposed to have a characteristic. The characteristic is supposed to have the requirements: starts with two capital letter followed by a number from 1-9 followed by 4 numbers from 0-9.

public void writeCharacteristic(){

System.out.println("write down the characteristic for the car."); String characteristic = kb.nextLine(); progress = false; if (characteristic.length() != 7){ System.out.println("The string is not 7 letter/numbers long"); progress = false; } for(int i = 0; i < 2; ++i){ if (characteristic.charAt(i) < "A" || characteristic.charAt(i) > "Z"){ System.out.println(" character number " + i + " is invalid"); progress = false; } } if (characteristic.charAt(3) < "1" || characteristic.charAt(3) > "9") progress = false; for (int j = 3; j < 7; ++j){ if (characteristic.charAt(j) < 0 || characteristic.charAt(j) > 9) progress =false; } if (progress == false){ System.out.println("characteristic will have the value null."); characteristic = null; } if (progress == true) car.setCharacteristic(characteristic);

}

I'm having a problem at the lines "if (characteristic.charAt(i) < "A" || characteristic.charAt(i) > "Z"){"

The compiler is saying "The operator < is undefined for the argument type(s) char, String"

Any help is highly appreciated, thanks.

In Java, you can compare a character ( char ) to a character, but you can't compare a character to a String . charAt returns a character, so you must compare its result to a character.

These are String

"A" "Z" "1" "9"

And these are characters

'A' 'Z' '1' '9'

You can compare a character to an integer ( int ), but the result may not be what you want. So in the code below:

for (int j = 3; j < 7; ++j){
    if (characteristic.charAt(j) < 0 || characteristic.charAt(j) > 9)

0 and 9 should be change to '0' and '9' .


Note: There is another unrelated logic error in your code:

String characteristic = kb.nextLine();

progress = false; 

Shouldn't progress be set to true here?

I would certainly check out the other answers on this page re. character comparisons. However, I would perhaps suggest a different approach given:

starts with two capital letter followed by a number from 1-9 followed by 4 numbers from 0-9

and investigate regular expressions . Something like:

[A-Z]{2}[1-9][0-9]{4}

would satisfy the above requirement.

Use single quotes for chars, double quotes for Strings.

 characteristic.charAt(3) < '1'

there is meaning for single and double quotes in java

And for your situation best suits is a regex

Replace the double quotes with single quotes.

You'll also have to put single quotes around the numbers when comparing them with chars, even though the compiler doesn't complain.

像这样比较

characteristic.charAt(3) < '1'

First, you can achieve this goal with regexp: [AZ]{2}[1-9][0-9]{4} (Read Pattern article to know how to use it).

If you want to do it as you started - use singleqoutes instead of doublequotes with characters. eg "a" -> 'a' .

If you want to assign value to char use single quote. If it is a String use double quote

 char myChar='a';

 String myString="a";

so

 characteristic.charAt(3) < "1"  should change as characteristic.charAt(3) < '1'

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM