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。我不想避免它。我的问题部分在于体验语言是如此广泛/巨大,决定一个好的设计方法可能是一个挑战。一个人只需要在课程之外学习,但有时会变成这样:“是的,我可以这样做,它完成了。”