简而言之,用户将输入一个数字(比如1到3)。这将决定循环应该搜索的数字范围。
switch(input){
case 1:
searchTerm = "i<10 && i>5";
case 2:
searchTerm = "i>=10 && i<19";
case 3:
searchTerm = "i>19 && i<24";
}
while(searchTerm){
//some function
}
这可能吗?我无法找到使用字符串作为搜索参数的方法。
编辑:我不认为我做了很好的解释为什么我需要这个。如果有不同数量的参数,该怎么办?例如:
case 1:
searchTerm = "i<5"
case 2:
searchTerm = "i>25 && i<29"
case 3:
searchTerm = "(i<50 && i>25) && (i>55 && i<75)"
case 4:
searchTerm = "(i<20 && i>15) && (i>300 && i<325) && (i>360 && i<380)
那怎么做呢?多个循环调用相同的函数?
答案 0 :(得分:9)
执行此操作的正确方法是根本不使用字符串:
int min, max;
switch(input){
case 1: // i<10 && i>5
min = 6;
max = 10;
break; // to avoid follow-through to the next case
case 2: // i>=10 && i<19
min = 10;
max = 20;
break;
case 3: // i>19 && i<24
min = 20;
max = 25;
break;
default:
// You need something here in case the value entered wasn't 1-3
}
for (int i = min; i < max; ++i) {
// ...
}
重新编辑:
我认为我没有很好地解释为什么我需要这个。如果有不同数量的参数,该怎么做?
在这种情况下,您必须使用表达式求值程序(或写一个,这是一个非平凡的任务)。例如,Spring中有一个(不推荐,只是碰巧听到它)。搜索&#34; Java表达式评估程序&#34;应该提出一些选择。
另一种选择,虽然有些人把你的问题误认为是Java Script 问题,但是使用Java内置的JavaScript评估器(Rhino或Nashorn)有点有趣。例如:Live Example
import javax.script.*;
class Ideone {
public static void main(String[] args) throws java.lang.Exception {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");
String searchTerm = "i >= 19 && i <= 24";
int i;
try {
i = 19;
engine.put("i", i);
while ((boolean)engine.eval(searchTerm)) {
System.out.println("i = " + i);
++i;
engine.put("i", i);
}
System.out.println("Done");
} catch (ScriptException scriptException) {
System.out.println("Failed with script error");
}
}
}
...但您仍然有确定i
使用的初始值的问题,我已在上面硬编码。
答案 1 :(得分:5)
在 Java 8 中,您可以选择 lambda 而不是String
:
Predicate<Integer> searchTerm = (Integer v) -> false;
switch (input) {
case 1:
searchTerm = (Integer v) -> v < 10 && v > 5;
break;
case 2:
searchTerm = (Integer v) -> v >= 10 && v < 19;
break;
case 3:
searchTerm = (Integer v) -> v > 19 && v < 24;
break;
}
while (searchTerm.test(i)) {
...
}
答案 2 :(得分:0)
您可以创建如下的枚举。
public enum SearchTerms {
None(""),
Between6And9("i<10 && i>5"),
Between10And18("i>=10 && i<19"),
Between20And23("i>19 && i<24");
private final String stringValue;
SearchTerms(String stringValue) {
this.stringValue = stringValue;
}
public String getStringValue() {
return stringValue;
}
public static SearchTerms fromStringValue(String stringValue) {
for (SearchTerms searchTerm : values()) {
if (searchTerm.getStringValue().equalsIgnoreCase(stringValue)) {
return searchTerm;
}
}
return SearchTerms.None;
}
}
用法:
SearchTerms searchTerm = SearchTerms.fromStringValue("i<10 && i>5");
switch(searchTerm) {
case Between6And9:
//dosomething
break;
}
答案 3 :(得分:-5)
您可以使用duplicity-full.manifest
duplicity-full.sigtar.gz
duplicity-full-signatures.sigtar.gz
duplicity-inc.33Z.to.914Z.manifest
duplicity-inc.33Z.to.914Z.vol1.difftar.gz
duplicity-new-signatures.33Z.to.914Z.sigtar.gz
JavaScript。
另外,请不要忘记每个.eval()
break;
查看此fiddle。
以下是摘录。
case: