자바에서 대 / 소문자 전환에 문자열 사용
나는 다음과 같은 변경해야 if
A를 '들 switch
- case
A에 대한 확인하면서 String
의 복잡성을 개선 할 수 있습니다.
String value = some methodx;
if ("apple".equals(value)) {
method1;
}
if ("carrot".equals(value)) {
method2;
}
if ("mango".equals(value)) {
method3;
}
if ("orange".equals(value)) {
method4;
}
하지만 어떤 가치를 얻게 될지 잘 모르겠습니다.
Java (버전 7 이전)는 스위치 / 케이스에서 문자열을 지원하지 않습니다. 그러나 열거 형을 사용하여 원하는 결과를 얻을 수 있습니다.
private enum Fruit {
apple, carrot, mango, orange;
}
String value; // assume input
Fruit fruit = Fruit.valueOf(value); // surround with try/catch
switch(fruit) {
case apple:
method1;
break;
case carrot:
method2;
break;
// etc...
}
사용하는 방법을 배우게 else
.
value
한 번에 두 개의 같지 않은 문자열과 같지 않기 때문에 가능한 결과는 5 개뿐입니다. 관심있는 각 값에 대해 하나씩, "위에 해당하지 않는 항목"에 대해 하나를 더합니다. 그러나 코드가 통과 할 수없는 테스트를 제거하지 않기 때문에 16 개의 "가능한"경로 (테스트 수의 2 ^)가 있으며 그 중 대부분은 절대 따라 가지 않을 것입니다.
를 사용하면 else
실제로 발생할 수있는 경로는 5 개뿐입니다.
String value = some methodx;
if ("apple".equals(value )) {
method1;
}
else if ("carrot".equals(value )) {
method2;
}
else if ("mango".equals(value )) {
method3;
}
else if ("orance".equals(value )) {
method4;
}
또는 switch
명령문 에서 문자열을 사용하는 기능이 포함 된 JDK 7을 사용하십시오 . 물론, Java는 어쨌든 / like 구조 switch
로 컴파일 합니다.if
else
모두가 지금 최소한 Java 7을 사용하고 있습니다. 그렇죠? 원래 문제에 대한 답은 다음과 같습니다.
String myString = getFruitString();
switch (myString) {
case "apple":
method1();
break;
case "carrot":
method2();
break;
case "mango":
method3();
break;
case "orange":
method4();
break;
}
메모
- case 문은
String.equals
. - 평소와 같이 문자열 일치는 대소 문자를 구분합니다.
- 에 따르면 문서 , 이것은 일반적으로 빠른 체인 사용하는 것보다
if
-else
(같이 문을 차오의 대답 ).
순환 복잡도를 줄이려면 맵을 사용하십시오.
Map<String,Callable<Object>> map = new HashMap < > ( ) ;
map . put ( "apple" , new Callable<Object> () { public Object call ( method1 ( ) ; return null ; } ) ;
...
map . get ( x ) . call ( ) ;
또는 다형성
구체적인에 모리의 대답을하기 위해 실행 코드는 다음과 같습니다.
Map<String,Callable<USer>> map = new HashMap<String,Callable<User>>();
map.put( "test" , new Callable<User> () { public User call (){ return fillUser("test" ); }} ) ;
map.put( "admin" , new Callable<Utente> () { public Utente call (){ return fillUser("admin" ); }} ) ;
사용자가 POJO 인 경우
User user = map.get(USERNAME).call();
마지막으로 호출 된 메서드는 어딘가에 있습니다.
private User fillUser(String x){
User user = new User();
// set something in User
return user;
}
Java는 문자열이있는 Switch-case를 지원하지 않습니다. 나는 생각 이 링크는 당신을 도울 수 있습니다. :)
권장 할 수없는 1.7 이전 방법은 다음과 같습니다.
public class PoorSwitch
{
final static public int poorHash (String s) {
long l = 0L;
for (char c: s.toCharArray ()) {
l = 97*l + c;
}
return (int) l;
}
public static void main (String args[])
{
String param = "foo";
if (args.length == 1)
{
param = args[0];
}
// uncomment these lines, to evaluate your hash
// test ("foo");
// test ("bar");
switch (poorHash (param)) {
// this doesn't work, since you need a literal constant
// so we have to evaluate our hash beforehand:
// case poorHash ("foo"): {
case 970596: {
System.out.println ("Foo!");
break;
}
// case poorHash ("bar"): {
case 931605: {
System.out.println ("Bar!");
break;
}
default: {
System.out.println ("unknown\t" + param);
break;
}
}
}
public static void test (String s)
{
System.out.println ("Hash:\t " + s + " =\t" + poorHash (s));
}
}
생성 된 코드에서 이러한 트릭으로 작업 할 수 있습니다. 그렇지 않으면 추천 할 수 없습니다. 해시 충돌 가능성이 걱정이 될 정도는 아니지만 무언가가 섞여 있으면 (잘라 내기 및 붙여 넣기) 오류를 찾기가 어렵습니다. 931605는 좋은 문서가 아닙니다.
개념 증명, 호기심으로 가져 가십시오.
데이터 유형 호환 int : short, Shor, byte, Byte, int, Integer, char, Character 또는 enum 유형에만 Switch를 적용 할 수 있습니다.
Evaluating String
variables with a switch statement have been implemented in Java SE 7, and hence it only works in java 7. You can also have a look at how this new feature is implemented in JDK 7.
Java 8 supports string switchcase.
String type = "apple";
switch(type){
case "apple":
//statements
break;
default:
//statements
break; }
String name,lname;
name= JOptionPane.showInputDialog(null,"Enter your name");
lname= JOptionPane.showInputDialog(null,"Enter your father name");
if(name.equals("Ahmad")){
JOptionPane.showMessageDialog(null,"welcome "+name);
}
if(lname.equals("Khan"))
JOptionPane.showMessageDialog(null,"Name : "+name +"\nLast name :"+lname );
else {
JOptionPane.showMessageDialog(null,"try again " );
}
}}
Not very pretty but here is another way:
String runFct =
queryType.equals("eq") ? "method1":
queryType.equals("L_L")? "method2":
queryType.equals("L_R")? "method3":
queryType.equals("L_LR")? "method4":
"method5";
Method m = this.getClass().getMethod(runFct);
m.invoke(this);
String value = someMethod();
switch(0) {
default:
if ("apple".equals(value)) {
method1();
break;
}
if ("carrot".equals(value)) {
method2();
break;
}
if ("mango".equals(value)) {
method3();
break;
}
if ("orance".equals(value)) {
method4();
break;
}
}
참고URL : https://stackoverflow.com/questions/10240538/use-string-in-switch-case-in-java
'Nice programing' 카테고리의 다른 글
HTML / CSS 회색으로 표시된 텍스트가있는 텍스트 상자를 만들고 정보를 입력하기 위해 클릭하면 사라지는 방법은 무엇입니까? (0) | 2020.12.13 |
---|---|
Java에서 Calendar를 java.sql.Date로 변환하는 방법? (0) | 2020.12.13 |
정적 (어휘) 범위 지정 대 동적 범위 지정 (의사 코드) (0) | 2020.12.13 |
상태 표시 줄을 눌러 UITableView 맨 위로 스크롤합니다. (0) | 2020.12.13 |
여러 제출 버튼이있는 MVC 면도기 양식? (0) | 2020.12.13 |