我可以使用下面的.java
文件获取输出,虽然是的,JShell
可以加载类文件,但我更感兴趣的是将其用作如下所示的脚本REPL。
如何使用JShell
控制台生成类似的输出?
[simple正则表达式示例:
[nsaunders@rolly Hands-On-Java-Regular-Expressions]$
[nsaunders@rolly Hands-On-Java-Regular-Expressions]$ gradle run
> Task :run
Jun. 14, 2020 3:54:53 P.M. com.jimbotec.dc.regex.MyRegex match
INFO: 1 John
Jun. 14, 2020 3:54:53 P.M. com.jimbotec.dc.regex.MyRegex match
INFO: 2 writes
Jun. 14, 2020 3:54:53 P.M. com.jimbotec.dc.regex.MyRegex match
INFO: 1 John
Jun. 14, 2020 3:54:53 P.M. com.jimbotec.dc.regex.MyRegex match
INFO: 2 Doe
Jun. 14, 2020 3:54:53 P.M. com.jimbotec.dc.regex.MyRegex match
INFO: 1 John
Jun. 14, 2020 3:54:53 P.M. com.jimbotec.dc.regex.MyRegex match
INFO: 2 Wayne
BUILD SUCCESSFUL in 1s
3 actionable tasks: 1 executed, 2 up-to-date
[nsaunders@rolly Hands-On-Java-Regular-Expressions]$
java:
package com.jimbotec.dc.regex;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class MyRegex {
Logger log = Logger.getLogger(App.class.getName());
public void match() {
String text
= "John writes about this, and John Doe writes about that,"
+ " and John Wayne writes about everything.";
String patternString1 = "(John) (.+?) ";
Pattern pattern = Pattern.compile(patternString1);
Matcher matcher = pattern.matcher(text);
while (matcher.find()) {
for (int i = 1; i <= matcher.groupCount(); i++) {
log.info(i + "\t\t" + matcher.group(i));
}
}
}
}
试图在JShell中复制以上代码:
jshell> /reset
| Resetting state.
jshell> /open src/main/resources/regex.jsh
| Exception java.lang.IllegalStateException: No match found
| at Matcher.group (Matcher.java:645)
| at (#6:1)
jshell> /list
1 : import static java.lang.System.out;
2 : String text = "John writes about this, and John writes about that, and John writes about everything.";
3 : String patternString1 = "(John) (.+?)";
4 : Pattern pattern = Pattern.compile(patternString1);
5 : Matcher matcher = pattern.matcher(text);
6 : out.println(matcher.group(1));
jshell>
jshell> /imports
| import java.io.*
| import java.math.*
| import java.net.*
| import java.nio.file.*
| import java.util.*
| import java.util.concurrent.*
| import java.util.function.*
| import java.util.prefs.*
| import java.util.regex.*
| import java.util.stream.*
| import static java.lang.System.out
jshell>
如何像上面的similar方法那样从match
本身内部获取JShell
输出?
解决方案:
jshell>
jshell> /reset
| Resetting state.
jshell>
jshell>
jshell> /open regex.jsh
John w
John
w
jshell>
jshell> /list
1 : import static java.lang.System.out;
2 : String text = "John writes about this, and John writes about that, and John writes about everything.";
3 : String patternString1 = "(John) (.+?)";
4 : Pattern pattern = Pattern.compile(patternString1);
5 : Matcher matcher = pattern.matcher(text);
6 : matcher.find()
7 : out.println(matcher.group(0))
8 : out.println(matcher.group(1))
9 : out.println(matcher.group(2))
jshell>
只是忘记运行find()
...