首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用JTextField从用户获取正则表达式。如何使它看起来像一个制表符,而不是a\后跟t

使用JTextField从用户获取正则表达式。如何使它看起来像一个制表符,而不是a\后跟t
EN

Stack Overflow用户
提问于 2012-02-08 12:29:45
回答 3查看 1.6K关注 0票数 2
代码语言:javascript
复制
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的内容

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-08 13:25:38

示例:

代码语言:javascript
复制
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() + '"');
}

输出:

代码语言:javascript
复制
src="This   is  a   test"
re="\t"
"   "
"   "
"   "

试试这个:

代码语言:javascript
复制
re=re.replace("\\t", "\t");
OR
re=re.replace("\\t", "\\\\t");

我认为问题在于,当你键入:

代码语言:javascript
复制
String str = "\t";

实际上,这与以下内容相同:

代码语言:javascript
复制
String str = "   ";

但如果你打字:

代码语言:javascript
复制
String str = "\\t";

然后System.out.print(str)将是"\t"

票数 1
EN

Stack Overflow用户

发布于 2012-02-08 12:45:07

但是,匹配\t应该有效,但是您的标志可能有问题。

下面是对我有用的东西:

代码语言:javascript
复制
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) + "\"");
}

产出如下:

代码语言:javascript
复制
Match: "A   B"
Match: "C   D"
票数 1
EN

Stack Overflow用户

发布于 2013-07-25 18:43:44

我的经验是,Java和JTable GUI控件通过前缀反斜杠来逃避用户输入的反斜杠。

用户键入两个字符序列“反斜杠t",控件的getText()方法返回包含三个字符序列”反斜杠反斜杠t“的字符串。所以格式化程序使用文本中的反斜杠来做它自己的事情,所以这里是作为代码:

代码语言:javascript
复制
  Single backslash: input is 2 char sequence \t and return value is 3 char \\t

对于三个字符的输入序列"backsl backsl t",getText()返回五个字符的序列"backsl t“。作为代码:

代码语言:javascript
复制
  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。

代码语言:javascript
复制
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系统上的输出如下,输出中的制表符可能无法通过这样的格式化程序:)

代码语言:javascript
复制
sequence is >x  y   z<
pattern BsTab is >x .*<
pattern BsBsTab is >x\t.*<
matched BsTab = true
matched BsBsTab = true

HTH

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9193335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档