读取文本文件并比较文本 - Java

时间:2011-07-30 22:18:46

标签: java string

在我的程序中,我正在读取并解析文件以获取资源。

我提取一个表示资源类型的字符串,执行一个简单的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.

如果我在此调用之前将类型设置为“spritesheet”,它会起作用,所以我想知道它是否是某种编码错误或什么?

我在java中没有做太多工作,所以我可能会遗漏一些简单的事情:)

2 个答案:

答案 0 :(得分:7)

假设type是一个字符串,您希望使用String.equals()来测试是否相等。使用==运算符测试以查看变量是否是对同一对象的引用。

另外,为了让您的生活更轻松,我建议您使用String.equalsIgnoreCase(),因为这样可以避免您拨打toLowerCase()

答案 1 :(得分:2)

从Java 7开始,您可以在switch语句中使用Strings! :)

以下内容应该有效:

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() + "|");
}

我还没有尝试过,让我知道它是怎么回事!