Java 在JFormattedTextField中实现正则表达式
我想在jFormattedTextField中使用正则表达式模式,如果可能的话,在JTextField中使用正则表达式模式,这与工作是否完成并不重要。我知道如何使用MaskFormatter和DocumentFilter,但我想知道是否可以使用regex模式 以下是我尝试的代码:Java 在JFormattedTextField中实现正则表达式,java,regex,Java,Regex,我想在jFormattedTextField中使用正则表达式模式,如果可能的话,在JTextField中使用正则表达式模式,这与工作是否完成并不重要。我知道如何使用MaskFormatter和DocumentFilter,但我想知道是否可以使用regex模式 以下是我尝试的代码: import java.awt.GridLayout; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.swi
import java.awt.GridLayout;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;
public class Test1 {
public static void main(String args[]) {
JFrame frame = new JFrame();
String regex = "[a-z]";
Pattern pt = Pattern.compile(regex);
Matcher r = pt.matcher("(.*)([a-z])");
JFormattedTextField ft = new JFormattedTextField(pt);
JTextField testField = new JTextField();
ft.addCaretListener(new CaretListener() {
public void caretUpdate(CaretEvent e) {
if (!r.find()) {
testField.setText("not found");
} else
testField.setText("found");
}
});
frame.setLayout(new GridLayout(2, 1));
frame.add(ft);
frame.add(testField);
frame.pack();
frame.setVisible(true);
}
}
但是它不起作用,没有找到。有没有办法做到这一点?因为我已经练习了一段时间,所以我觉得使用正则表达式更舒服。我不知道为什么您要搜索匹配的模式。您是否尝试执行以下操作
import java.awt.GridLayout;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;
public class Test1 {
public static void main(String args[]) {
JFrame frame = new JFrame();
String regex = "[a-z]";
Pattern pt = Pattern.compile(regex);
JFormattedTextField ft = new JFormattedTextField(pt);
JTextField testField = new JTextField();
ft.addCaretListener(new CaretListener() {
public void caretUpdate(CaretEvent e) {
Matcher r = pt.matcher(ft.getText());
if (!r.find()) {
testField.setText("not found");
} else
testField.setText("found");
}
});
frame.setLayout(new GridLayout(2, 1));
frame.add(ft);
frame.add(testField);
frame.pack();
frame.setVisible(true);
}
}
我不知道您为什么要搜索匹配的模式,您是否尝试执行以下操作
import java.awt.GridLayout;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;
public class Test1 {
public static void main(String args[]) {
JFrame frame = new JFrame();
String regex = "[a-z]";
Pattern pt = Pattern.compile(regex);
JFormattedTextField ft = new JFormattedTextField(pt);
JTextField testField = new JTextField();
ft.addCaretListener(new CaretListener() {
public void caretUpdate(CaretEvent e) {
Matcher r = pt.matcher(ft.getText());
if (!r.find()) {
testField.setText("not found");
} else
testField.setText("found");
}
});
frame.setLayout(new GridLayout(2, 1));
frame.add(ft);
frame.add(testField);
frame.pack();
frame.setVisible(true);
}
}
你根本不需要媒人;String具有更方便的matches方法
假设找到意味着在输入中找到一个字母:
ft.addCaretListener(new CaretListener() {
public void caretUpdate(CaretEvent e) {
if (ft.getText().matches(".*[a-z].*"))
testField.setText("not found");
else
testField.setText("found");
}
});
或者,如果您愿意,您可以使用三元数将其表示为一行:
testField.setText((ft.getText().matches(".*[a-z].*") ? "" : "not ") + "found");
你根本不需要媒人;String具有更方便的matches方法
假设找到意味着在输入中找到一个字母:
ft.addCaretListener(new CaretListener() {
public void caretUpdate(CaretEvent e) {
if (ft.getText().matches(".*[a-z].*"))
testField.setText("not found");
else
testField.setText("found");
}
});
或者,如果您愿意,您可以使用三元数将其表示为一行:
testField.setText((ft.getText().matches(".*[a-z].*") ? "" : "not ") + "found");
我希望这段代码始终返回find,因为您正在查找任何小写拉丁字母,因为[a-z]是您在。*[a-z]字符串中的模式。看一看。您是否打算使用Matcher r=pt.matchertestField.getText;?请举例说明您的问题。我希望此代码始终返回find,因为您正在查找任何小写拉丁字母,因为[a-z]是您在。*[a-z]字符串中的模式。看一看。您是否打算使用Matcher r=pt.matchertestField.getText;?请举例说明你的问题。