Java - 如何将用户输入作为方法调用执行?

时间:2017-10-19 13:01:36

标签: java methods java.util.scanner

我希望能够在IDE的控制台中键入以下内容:

reverse("a b c d")

但目前我只能输入

a b c d 

我如何实现这一目标?我尝试过使用args [0]但是我收到了错误。

public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            String sentence = sc.nextLine();
            reverse(sentence);

        }
        public static void reverse(String s){
                String [] stringArray;
                stringArray = s.split(" ");
                int counter = stringArray.length;
            for (String word : stringArray) {
                counter -=1;
                System.out.print(stringArray[counter]+" ");
            }

        }

2 个答案:

答案 0 :(得分:2)

要解决您的问题,您可以使用一些正则表达式来获取reverse("get this")中的值:

s = s.replaceAll("reverse\\(\"(.*?)\"\\)", "$1");

秒而不是那个循环你可以使用StringBuilder::reverse来反转你的字符串:

public static void reverse(String s) {
    s = s.replaceAll("reverse\\(\"(.*?)\"\\)", "$1");
    System.out.println(s);
    System.out.println(new StringBuilder(s).reverse().toString());
}

<强>输入

reverse("a b c d")

<强>输出

d c b a

编辑

根据您的评论:

  

当我运行应用程序时。它会要求用户输入。如果   用户输入:reverse("I am an apple")然后输出:   apple an am I

在这种情况下,您必须检查方法的名称,因此如果String以名称reverse开头,则调用reverse方法,例如:

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    String sentence = sc.nextLine();

    if (sentence.startsWith("reverse")) {
        reverse(sentence);
    }
}

public static void reverse(String s) {
    s = s.replaceAll("reverse\\(\"(.*?)\"\\)", "$1");
    List<String> stringArray = Arrays.asList(s.split("\\s+"));
    Collections.reverse(stringArray);
    System.out.println(stringArray);
}

答案 1 :(得分:0)

如果您想使用java反射API,请尝试以下方法:

package Test;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Scanner;

public class Example {
    public static void main(String[] args) throws InvocationTargetException, ClassNotFoundException, NoSuchMethodException, IllegalAccessException {
        Scanner sc = new Scanner(System.in);
        String sentence = sc.nextLine();
        Class<?> c = Class.forName("Test.Example");//your package and class
                                              //get the method to invoke
        Method  method = c.getDeclaredMethod (sentence.substring(0, sentence.indexOf("(")), String.class);
                           //get the string param
        method.invoke (c, sentence.split("\"")[1]);               
    }
    public static void reverse(String s){
        String [] stringArray;
        stringArray = s.split(" ");
        int counter = stringArray.length;
        for (String word : stringArray) {
            counter -=1;
            System.out.print(stringArray[counter]+" ");
        }
    }
    public static void doNotReverse(String s){
        System.out.print(s);
    }
}

您可以在控制台中输入reverse("a b c d")doNotReverse("a b c d")