Чтение в текстовом файле и сравнение текста - Java - PullRequest
1 голос
/ 31 июля 2011

В моей программе я читаю и анализирую файл для ресурсов.

Я извлекаю строку, которая представляет тип ресурса, делаю простой оператор if then else, чтобы проверить, соответствует ли он каким-либо известным типам, и выдает ошибку, если это не так:

if(type.toLowerCase() == "spritesheet") {
    _type = ResourceType.Spritesheet;
} else if(type.toLowerCase() == "string") {
    _type = ResourceType.String;
} else if(type.toLowerCase() == "texture") {
    _type = ResourceType.Texture;
} else if(type.toLowerCase() == "num") {
    _type = ResourceType.Number;
} else {
    throw new Exception("Invalid Resource File - Invalid type: |" + type.toLowerCase() + "|");
}

Игнорируя мое неправильное именование и исключение, не являющееся дескриптором, это утверждение всегда будет последним, даже если тип IS "spritesheet", как считано из файла и т. Д.

java.lang.Exception: Invalid Resource File - Invalid type: |spritesheet|
at Resource.Load(Resource.java:55) //Final else.

Если я установлю type на spritesheet перед этим вызовом, это сработает, поэтому мне интересно, если это какая-то ошибка кодирования или что-то подобное?

Я не проделал большую работу в Java, поэтому я мог упустить что-то простое:)

Ответы [ 2 ]

7 голосов
/ 31 июля 2011

Предполагая, что type является строкой, вы хотите использовать String.equals () для проверки на равенство.Используя операторы == для проверки, являются ли переменные ссылками на один и тот же объект.

Также, чтобы упростить вашу жизнь, я бы предложил использовать String.equalsIgnoreCase () , так как это будетизбавить вас от звонков toLowerCase().

2 голосов
/ 31 июля 2011

Начиная с Java 7, вы можете использовать Strings в операторах switch!:)

Должно работать следующее:

switch (type.toLowerCase()) {
    case "spritesheet":  _type = ResourceType.Spritesheet; break;
    case "string":       _type = ResourceType.String;      break;
    case "texture":      _type = ResourceType.Texture;     break;
    case "num":          _type = ResourceType.Number;      break;

    default:             throw new Exception("Invalid Resource File " + 
                         "- Invalid type: |" + type.toLowerCase() + "|");
}

Я еще не пробовал, дайте мне знать, как это происходит!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...