JTextField reSource; //contains the regex expression the user wants to search for
String re=reSource.getText();
Pattern p=Pattern.compile(re,myflags); //myflags defined elsewhere in code
Matcher m=p.matcher(src); //src is the text to search and comes from a JTextArea
while (m.find()==true) {\t,它会找到\t not选项卡.\\\t,它会找到\\\t not选项卡.[\t]或[\\\t],就会发现t不是选项卡。我希望这样,如果用户输入\t,它就会找到选项卡。当然,它也需要与\n,\r等.
如果使用re="\t";代替re=reSource.getText();,在JTextField中使用\t,那么它会找到选项卡。如何让它处理JTextField的内容
发布于 2012-02-08 13:25:38
示例:
String src = "This\tis\ta\ttest";
System.out.println("src=\"" + src + '"'); // --> prints "This is a test"
String re="\\t";
System.out.println("re=\"" + re + '"'); // --> prints "\t" - as when you use reSource.getText();
Pattern p = Pattern.compile(re);
Matcher m = p.matcher(src);
while (m.find()) {
System.out.println('"' + m.group() + '"');
}输出:
src="This is a test"
re="\t"
" "
" "
" "试试这个:
re=re.replace("\\t", "\t");
OR
re=re.replace("\\t", "\\\\t");我认为问题在于,当你键入:
String str = "\t";实际上,这与以下内容相同:
String str = " ";但如果你打字:
String str = "\\t";然后System.out.print(str)将是"\t"。
发布于 2012-02-08 12:45:07
但是,匹配\t应该有效,但是您的标志可能有问题。
下面是对我有用的东西:
String src = "A\tBC\tD";
Pattern p=Pattern.compile("\\w\\t\\w"); //simulates the user entering \w\t\w
Matcher m=p.matcher(src);
while (m.find())
{
System.out.println("Match: \"" + m.group(0) + "\"");
}产出如下:
Match: "A B"
Match: "C D"发布于 2013-07-25 18:43:44
我的经验是,Java和JTable GUI控件通过前缀反斜杠来逃避用户输入的反斜杠。
用户键入两个字符序列“反斜杠t",控件的getText()方法返回包含三个字符序列”反斜杠反斜杠t“的字符串。所以格式化程序使用文本中的反斜杠来做它自己的事情,所以这里是作为代码:
Single backslash: input is 2 char sequence \t and return value is 3 char \\t对于三个字符的输入序列"backsl backsl t",getText()返回五个字符的序列"backsl t“。作为代码:
Double backslash: input is 3 char sequence \\t and return value is 5 char \\\\t这基本上可以防止反斜杠修改t以产生一个字符序列,当像System.out.println这样的东西解释时,这个字符序列就变成了一个制表符。
令我惊讶的是,regex处理器很方便地接受了这两种方法。两个字符序列"\t“与制表符字符匹配,三个字符序列"\t”也是如此。请参阅下面的演示代码。system.out调用演示了哪些序列和模式有制表符,在JDK1.7中两者都匹配产生true。
package my.text;
/**
* Demonstrate use of tab character in regexes
*/
public class RegexForSo {
public static void main(String [] argv) {
final String sequenceTab="x\ty\tz";
final String patternBsTab = "x\t.*";
final String patternBsBsTab = "x\\t.*";
System.out.println("sequence is >" + sequenceTab + "<");
System.out.println("pattern BsTab is >" + patternBsTab + "<");
System.out.println("pattern BsBsTab is >" + patternBsBsTab + "<");
System.out.println("matched BsTab = " + sequenceTab.matches(patternBsTab));
System.out.println("matched BsBsTab = " + sequenceTab.matches(patternBsBsTab));
}
}在我的JDK1.7系统上的输出如下,输出中的制表符可能无法通过这样的格式化程序:)
sequence is >x y z<
pattern BsTab is >x .*<
pattern BsBsTab is >x\t.*<
matched BsTab = true
matched BsBsTab = trueHTH
https://stackoverflow.com/questions/9193335
复制相似问题