Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.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 基于字符串返回可切换的值_Java - Fatal编程技术网

Java 基于字符串返回可切换的值

Java 基于字符串返回可切换的值,java,Java,我不知道我要怎么攻击它 基本上,我所拥有的是不同长度的输入,一次或多次,这将导致一个动作。它来自键入的输入、文件等 我不知道用什么和如何解决这个问题。最好让函数返回一个int,该函数对应于公共静态final int FOO=1,一个枚举,另一种方式 到目前为止,我拥有的是一系列if语句,如: if (str.equals("foo") || str.equals("F")) { blah; } else if (str.equals("beach")) { more bl

我不知道我要怎么攻击它

基本上,我所拥有的是不同长度的输入,一次或多次,这将导致一个动作。它来自键入的输入、文件等

我不知道用什么和如何解决这个问题。最好让函数返回一个
int
,该函数对应于
公共静态final int FOO=1
,一个
枚举
,另一种方式

到目前为止,我拥有的是一系列if语句,如:

if (str.equals("foo") || str.equals("F")) {
      blah;
} else if (str.equals("beach")) {
      more blah;
}
这和其他方法一样好,还是有更好的方法?看了一眼
enum
,但这似乎比在例如C中更重要。这可能是错误的,但它会朝着这个方向发展吗

class Mother
{

    HappyCamping() {
        switch (ValInput(str)) {
        case FOO: do fo; break;
        case BAR: do bar; break;
        case BAZ: do fo bar: break
        ...
    }

    private enum ValInput(String str)
    {
         FOO("foo"), BAR("bar"), BAZ("baz");

         private int value;

         private ValInput(String str) {
              if (str.equals("blah"))
                   this.value = 1;
              ...
         }
    }
}
重点是采用更干净的方法,并将“解析”从主例程中分离出来。来这里的好办法是什么

这和其他方法一样好,还是有更好的方法?我看过enum,但似乎比在e.g.C.中更重要。这可能是错误的,但它会朝着这个方向发展吗

class Mother
{

    HappyCamping() {
        switch (ValInput(str)) {
        case FOO: do fo; break;
        case BAR: do bar; break;
        case BAZ: do fo bar: break
        ...
    }

    private enum ValInput(String str)
    {
         FOO("foo"), BAR("bar"), BAZ("baz");

         private int value;

         private ValInput(String str) {
              if (str.equals("blah"))
                   this.value = 1;
              ...
         }
    }
}
然后去学习enum是如何工作的。不要仅仅因为有更多的功能就回避可能解决问题的功能。如果您想要一组固定的操作,那么您的设计很可能希望使用Java风格的枚举

enum Action { CLICK("click"), CLEAR("erase"); } 
等等,这是一个好的开始

Java(我认为是6,可能是7)也支持
switch
获取字符串,而不是整数或枚举值

这和其他方法一样好,还是有更好的方法?我看过enum,但似乎比在e.g.C.中更重要。这可能是错误的,但它会朝着这个方向发展吗

class Mother
{

    HappyCamping() {
        switch (ValInput(str)) {
        case FOO: do fo; break;
        case BAR: do bar; break;
        case BAZ: do fo bar: break
        ...
    }

    private enum ValInput(String str)
    {
         FOO("foo"), BAR("bar"), BAZ("baz");

         private int value;

         private ValInput(String str) {
              if (str.equals("blah"))
                   this.value = 1;
              ...
         }
    }
}
然后去学习enum是如何工作的。不要仅仅因为有更多的功能就回避可能解决问题的功能。如果您想要一组固定的操作,那么您的设计很可能希望使用Java风格的枚举

enum Action { CLICK("click"), CLEAR("erase"); } 
等等,这是一个好的开始


Java(我认为可能是6,也可能是7)也支持
switch
获取字符串,而不是整数或枚举值。

不确定我是否理解整个问题,但您可以在Java中轻松地将字符串转换为枚举

如果条目字符串是有限的和预定义的,并且您希望使用

EnumType.valueOf("foo")

我建议您阅读Java枚举,与C枚举相比,Java枚举功能非常强大。

我不确定是否理解整个问题,但您可以在Java中轻松地将字符串转换为枚举

如果条目字符串是有限的和预定义的,并且您希望使用

EnumType.valueOf("foo")

我建议您阅读Java枚举,与C枚举相比,Java枚举功能非常强大。

在Java 7中,您可以在
开关
表达式中使用
字符串
。参考:


在Java 7中,可以在
开关
表达式中使用
字符串
。参考:


您的if语句似乎是解决此问题的最合乎逻辑的方法。没有必要让你的生活变得复杂,只要保持简单就行了。任何其他方法都有权衡和复杂性



考虑使用图和命令模式,如图所示。您可以隐藏关键字到功能的所有映射,并且不必使用
if
开关

您的if语句似乎是解决此问题的最合乎逻辑的方法。没有必要让你的生活变得复杂,只要保持简单就行了。任何其他方法都有权衡和复杂性



考虑使用图和命令模式,如图所示。您可以隐藏关键字到功能的所有映射,并且永远不必使用
if
开关

一种方法是编写返回标记的解析器。令牌可以用int或enum表示。以您建议的方式模块化您的代码

另一种方法是使用枚举

public enum Token {

   FOO("foo", "f"),
   BAR("bar", "b");

   private String keyword;
   private String abbreviation;

   private Token(String keyword, String abbreviation) {
       this.keyword = keyword;
       this.abbreviation = abbreviation;
   }

   public String getKeyword() { 
       return this.keyword; 
   }
   public String getAbbreviation() { 
       return this.abbreviation;
   }

   public static Token valueOf(String s) {
       for (Token token : values()) {
           if (token.getKeyword().equals(s) || token.getAbbreviation().equals(s)) {
               return token;
           }
       }
       throw new IllegalArgumentException("No such keyword:  " + s);
   }
}
然后,您可以执行以下操作:

switch (Token.valueOf(inputString)) {
    case BAR : doBarStuff(); return;
    case FOO : doFooStuff(); return;
}

一种方法是编写一个返回令牌的解析器。令牌可以用int或enum表示。以您建议的方式模块化您的代码

另一种方法是使用枚举

public enum Token {

   FOO("foo", "f"),
   BAR("bar", "b");

   private String keyword;
   private String abbreviation;

   private Token(String keyword, String abbreviation) {
       this.keyword = keyword;
       this.abbreviation = abbreviation;
   }

   public String getKeyword() { 
       return this.keyword; 
   }
   public String getAbbreviation() { 
       return this.abbreviation;
   }

   public static Token valueOf(String s) {
       for (Token token : values()) {
           if (token.getKeyword().equals(s) || token.getAbbreviation().equals(s)) {
               return token;
           }
       }
       throw new IllegalArgumentException("No such keyword:  " + s);
   }
}
然后,您可以执行以下操作:

switch (Token.valueOf(inputString)) {
    case BAR : doBarStuff(); return;
    case FOO : doFooStuff(); return;
}

我不相信,但只是想确定一下,您使用的是Java7吗?如果是的话,您可以将
switch
语句与
String
对象一起使用。@Gamb:是的,但如果这会导致任何问题,我很高兴知道。我喜欢兼容性,也就是说,如果您的应用程序是针对Java6环境抛出的,那么它可能会导致问题。除此之外,还有许多其他特定于Java 7的内容,除非您使用的是Java 6设置。如果您非常担心向后兼容性,我会坚持使用枚举。如果枚举不能在定义了一组选项的上下文中使用,那么它们有什么好处?不过,如果你将来有新的选择,你可以考虑在<>代码>如果 s,但是既然你必须改变代码,那就是你的电话。我相信不是,但你可以肯定,你是用java 7吗?如果是的话,您可以将
switch
语句与
String
对象一起使用。@Gamb:是的,但如果这会导致任何问题,我很高兴知道。我喜欢兼容性,也就是说,如果您的应用程序是针对Java6环境抛出的,那么它可能会导致问题。除此之外,还有许多其他特定于Java 7的内容,除非您使用的是Java 6设置。如果您非常担心向后兼容性,我会坚持使用枚举。如果枚举不能在定义了一组选项的上下文中使用,那么它们有什么好处?不过,如果将来有新的选择,你可以考虑在<代码>下保持< < /C> > s,但是无论如何你必须改变代码。这是你的调用。是的,<代码>开关< /Cord>支持<代码>字符串 > java支持,自java 7。我不想避免它。我的问题部分在于体验语言是如此广泛/巨大,决定一个好的设计方法可能是一个挑战。一个人只需要在课程之外学习,但有时会变成这样:“是的,我可以这样做,它完成了。”