如下代码有个枚举类,怎样才能将字符串“arin”转成WhoisRIR.ARIN枚举类呢?

问题

	WhoisRIR rir = //convert 'arin' to enum WhoisRIR.ARIN?
	public enum WhoisRIR {
		ARIN("whois.arin.net"),
		RIPE("whois.ripe.net"),
		APNIC("whois.apnic.net");
	}
	private String url;
	
	private WhoisRIR(String url) {
		this.url = url;
	}
	
	public String getUrl() {
		return url;
	}

解决

为了解决这个问题,我们可以使用枚举的valueof()方法将字符串转化大写并设置默认的国际化。

import java.util.Locale;

public class EnumTest {

	public static void main(String[] args) {	
	//Solution: Uses valueOf()
	System.out.println(WhoisRIR.valueOf("arin".toUpperCase()));
	//Recommended Solution: add locale	
	WhoisRIR rir =   WhoisRIR.valueOf("ripe".toUpperCase(Locale.ENGLISH));
		System.out.println(rir);
		System.out.println(rir.getUrl());
	}

}
ARIN
RIPE
whois.ripe.net

再做下测试,不将字符串转化为大写:

import java.util.Locale;

public class EnumTest {

	public static void main(String[] args) {	
		//error, need convert the String to uppercase
		System.out.println(WhoisRIR.valueOf("arin"));
	}

}
Exception in thread "main" java.lang.IllegalArgumentException: 
    No enum constant com.mkyong.whois.utils.WhoisRIR.arin
	at java.lang.Enum.valueOf(Unknown Source)
	at com.mkyong.whois.utils.WhoisRIR.valueOf(WhoisRIR.java:1)
	at com.mkyong.whois.utils.TestEnum.main(TestEnum.java:17)

英文原文链接

原创文章转载请注明出处: Java字符串转枚举类型