2016-09-19 47 views
0

我是一个初学者,我正在编写一个程序,它将是一个简单的路由器模拟器。如何将字符串切片为两个并将子字符串转换为不同的函数?

我想输入命令“ipA 192.0.0.1”(不同的IP),并希望切换语句以检测“ipA”或“ipB”等。在每一种情况下分配给命令我想传输IP(字符串)到其他功能。这是我的简单代码。任何解决方案它的工作不:(

public class Main { 

private static Scanner scan; 
private static Commands com; 

public static void main(String[] args) { 

    com = new Commands();  
    scan = new Scanner(System.in); 

    while(true){ 


     String s = scan.nextLine(); 

     switch(s){ 
     case("help"): 
      com.help(); 
     break; 

     case(s.substring(0, 3).equals("ipA")): 
      com.ipA(s.substring(5)); 
     break; 

     case(s.substring(0, 4).equals("ipB1")): 
      com.ipA(s.substring(6)); 
     break; 

     case(s.substring(0, 4).equals("ipB2")): 
      com.ipA(s.substring(6)); 
     break; 

     case(s.substring(0, 3).equals("ipC")): 
      com.ipA(s.substring(5)); 
     break; 

     default: 
      System.out.println("Wrong!!!"); 
     break; 
     } 







    } 
} 

}

+1

你不能像Java那样使用'switch'。你可以用'if'语句代替。 – khelwood

+0

好的,我会用if语句来试试。谢谢! –

+1

查看String中的'startsWith'。 – Mark

回答

1

这应该让你开始:

public static void main(String[] args) { 


    com = new Commands(); 
    scan = new Scanner(System.in); 


    while (true) { 

     String o = scan.nextLine(); 
     String s = o.split(" ")[0]; 

     switch (s) { 
     case ("help"): 
      com.help(); 
      break; 

     case ("ipA"): 
      com.ipA(o.substring(4)); 
      break; 

     case ("ipB1"): 
      com.ipA(o.substring(5)); 
      break; 

     case ("ipB2"): 
      com.ipA(o.substring(5)); 
      break; 

     case ("ipC"): 
      com.ipA(o.substring(4)); 
      break; 

     default: 
      System.out.println("Wrong!!!"); 
      break; 
     } 

    } 
} 

你内心case使用的是布尔表达式的表达式,但你的交换机是基于字符串与。 switch(s)。所以你的案例也应该是String。

1

这就是if语句的解决方案,你可以使用if()else if() {}和最后else {}覆盖所有可能的条件。第一个true结果将被执行,其余的不会在运行时发生。

package stackoverflow_Question39568263; 

import java.util.Scanner; 

public class Main { 

    public static void main(final String[] args) { 
     final Scanner scan; 
     final Commands com; 

     com = new Commands(); 
     scan = new Scanner(System.in); 

     while (true) {  
      final String s = scan.nextLine(); 

      if (s == "help") { 
       com.help(); 
      } 
      else if (s.substring(0, 3).equals("ipA")) { 
       com.ipA(s.substring(5)); 
      } 
      else if (s.substring(0, 4).equals("ipB1")) { 
       com.ipA(s.substring(6)); 
      } 
      else if (s.substring(0, 4).equals("ipB2")) { 
       com.ipA(s.substring(6)); 
      } 
      else if (s.substring(0, 3).equals("ipC")) { 
       com.ipA(s.substring(5)); 
      } else { 
       System.out.println("Wrong!!!"); 
      } 
     } 
    } 
} 
0

您可以实施流处理。最主要的好处 - 实施替代的switch-case后,你的处理代码不会改变:

Action是的匹配是你的行动适用于输入字符串:

abstract class Action { 
    public static final Action WRONG_ACTION = new Action() { 
     @Override 
     public void apply(String s) { 
      System.out.println("Wrong"); 
     } 
    }; 

    private Pattern pattern; 

    public Action() { 
    } 
    public Action(String pattern) { 
     this.pattern = Pattern.compile(pattern); 
    } 
    public boolean isApplicable(String s) { 
     return pattern.matcher(s).matches(); 
    } 

    abstract public void apply(String s); 

}

处理看起来像:

private List<Action> actions; 

actions.stream() 
     .filter(x -> x.isApplicable(s)) 
     .findFirst() 
     .orElse(Action.WRONG_ACTION) 
     .apply(s); 

Action例如:

class IpAAction extends Action { 
    @Override 
    public void apply(String s) { 
     ... 
    } 
} 

new IpAAction("^ipA");