Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有用于状态名称查找/查找的Java API或快捷方式?_Java_Api_If Statement - Fatal编程技术网

是否有用于状态名称查找/查找的Java API或快捷方式?

是否有用于状态名称查找/查找的Java API或快捷方式?,java,api,if-statement,Java,Api,If Statement,我正在编写一个程序,它接受一个字符串,一个州名(例如纽约),并输出相应的缩写(例如NY)。我的程序考虑了所有50个州,所以我的第一个想法是使用大量的if/else if语句,但现在我想一定有更好的方法…更快的方法…没有这么多看似冗余的代码 片段: if (dirtyState.equalsIgnoreCase("New York")) { cleanState = "NY"; } else if (dirtyState.equalsIgnoreCase("Maryland

我正在编写一个程序,它接受一个字符串,一个州名(例如纽约),并输出相应的缩写(例如NY)。我的程序考虑了所有50个州,所以我的第一个想法是使用大量的
if/else if
语句,但现在我想一定有更好的方法…更快的方法…没有这么多看似冗余的代码

片段:

if (dirtyState.equalsIgnoreCase("New York")) {
        cleanState = "NY";
    } else if (dirtyState.equalsIgnoreCase("Maryland")) {
        cleanState = "MD";
    } else if (dirtyState.equalsIgnoreCase("District of Columbia")) {
        cleanState = "DC";
    } else if (dirtyState.equalsIgnoreCase("Virginia")) {
        cleanState = "VA";
    } else if (dirtyState.equalsIgnoreCase("Alabama")) {
        cleanState = "AL";
    } else if (dirtyState.equalsIgnoreCase("California")) {
        cleanState = "CA";
    } else if (dirtyState.equalsIgnoreCase("Kentuky")) {
        cleanState = "KY";
        // and on and on...
是否有一个API可以使这个过程更简单?也许是一条捷径

非常感谢您的反馈,并提前感谢=)

您可以使用允许您使用不区分大小写的自定义比较器的。它看起来是这样的:

Map<String, String> states = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
states.put("New York", "NY");
states.put("Maryland", "MD");
//etc.
可以使用允许使用不区分大小写的自定义比较器的。它看起来是这样的:

Map<String, String> states = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
states.put("New York", "NY");
states.put("Maryland", "MD");
//etc.

最好抓取一个文件并将其放入属性文件中,如:

New York=NY
Maryland=MD
District of Columbia=DC
Virginia=VA
然后在循环中加载内容,并在其条目上循环(它扩展):


最好抓取一个文件并将其放入属性文件中,如:

New York=NY
Maryland=MD
District of Columbia=DC
Virginia=VA
然后在循环中加载内容,并在其条目上循环(它扩展):


如果您使用的是Java 7,则可以在switch语句中使用字符串,例如:

switch (dirtyState.toLowerCase())
{ 
   case "new york": cleanState = "NY"; break;
   case "maryland": cleanState = "MD"; break;
   // so on...
}

如果您使用的是Java 7,则可以在switch语句中使用字符串,例如:

switch (dirtyState.toLowerCase())
{ 
   case "new york": cleanState = "NY"; break;
   case "maryland": cleanState = "MD"; break;
   // so on...
}
您可以使用枚举:

public enum State {
    AL("Alabama"), CA("California"), NY("New York");

    private State(String name) {
        this.name = name;
    }

    private String name;

    static String findByName(String name) {
        for ( int i = 0; i != values().length; ++i ) {
            if ( name.equalsIgnoreCase(values()[i].name))
                return values()[i].toString();
        }
        throw new IllegalArgumentException();
    }    
}

public class StateTest {    
    public static void main(String[] args) {
        String name = "New York";
        System.out.println(name + ": " + State.findByName(name));
    }
}
您可以使用枚举:

public enum State {
    AL("Alabama"), CA("California"), NY("New York");

    private State(String name) {
        this.name = name;
    }

    private String name;

    static String findByName(String name) {
        for ( int i = 0; i != values().length; ++i ) {
            if ( name.equalsIgnoreCase(values()[i].name))
                return values()[i].toString();
        }
        throw new IllegalArgumentException();
    }    
}

public class StateTest {    
    public static void main(String[] args) {
        String name = "New York";
        System.out.println(name + ": " + State.findByName(name));
    }
}

好主意,但我该如何编码呢?我会将列表(作为csv)放在prop文件中吗?我编辑了答案以添加一个工作示例。好主意,但我该如何编写代码呢?我会把列表(作为csv)放在道具文件中吗?我编辑了答案以添加一个工作示例。我也喜欢这种方式,谢谢!我也喜欢这种方式,谢谢!