我无法使import java.util.ArrayList;
import java.util.regex.*;
public String getString(String input, int i, int j){
ArrayList <String> list = new ArrayList <String> ();
Matcher m = Pattern.compile("(\"[^\"]+\")").matcher(input);
while (m.find()) {
list.add(m.group(1));
}
return list.get(i - 1) + list.get(j - 1);
}
循环工作。我认为这个例子解决了问题的关键:
String input = "\"Bruce Wayne\" \"43\" \"male\" \"Gotham\"";
String res = getString(input, 1, 3);
System.out.println(res);
哪个运行错误:
"Bruce Wayne""male"
中的错误:没有循环中断/下一步,跳到顶级
奇怪的是,while(TRUE)
循环似乎已成功执行:
l <- list(x = 5)
while (TRUE){
with(l, if (x > 100) break else l$x <<- x + 5)
}
看来问题是我在子环境中发送eval(expr, envir, enclos)
语句,因为以下按预期工作而没有错误:
while
认为这只是一个环境问题,我也尝试用l
# $x
# [1] 105
和break
替换x = 5
while(TRUE){
if (x > 100) break else x <<- x+5
}
,但无济于事。
如何停止此错误?
我认为break
可能是相关的:
eval(break, parent.env())
答案 0 :(得分:3)
@ Vongo建议的一个变体是使用environment()
捕获应该进行评估的环境,然后使用evalq()
在正确的位置评估break
l <- list(x = 5)
while (TRUE){
env <- environment()
with(l, if (x > 100) evalq(break, env) else l$x <<- x + 5)
}
这可以避免解析文本字符串,并且因此看起来不那么hacky。在捕获的环境中进行评估env
允许循环处于R代码中的任何级别,而不仅仅是.GlobalEnv。这就像非局部跳转(又称GOTO),这使得更难以推断代码。
答案 1 :(得分:1)
也许我不明白问题的所有利害关系,但你可以试试:
l <- list(x = 5)
while (TRUE){
with(l, if (x > 100) eval(parse(text="break"), envir=.GlobalEnv) else l$x <<- x + 5)
}