有一个问题:我如何在 Java 中找到文本中的所有单词,例如 4 个符号长?然后我该如何替换它们?
为了找到我写的一些文字
<
fButton.addActionListener(new ActionListener()
{public void actionPerformed(ActionEvent event)
{int i=text.getText().indexOf(field2.getText(),text.getSelectionStart());
if(i>=0)
text.select(i,i+field2.getText().length());
text.requestFocusInWindow()
;>
我尝试组合按钮和字段,但只有 2 个错误:
symbol : method parseInt (javax.swing.JTextField)
location: class java.lang.Integer
numb=Integer.parseInt(field2);
^
symbol : method replaceAll (java.lang.String,javax.swing.JTextField)
location: class javax.swing.JTextArea
text = text.replaceAll("\\b\\w{4}\\b", field3);
^
代码:
field2=new JTextField("Enter number",10);
int numb;
numb=Integer.parseInt(field2);
tPanel.add(field2);
JButton fButton=new JButton ("Find and Replace");
tPanel.add(fButton);
fButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
text = text.replaceAll("\\b\\w{4}\\b", field3);
}});
field3=new JTextField("Enter replace",10);
tPanel.add(field3);
看不懂((
最佳答案
您在问题中写了“符号”。我将把它解释为“单词字符”。如果您想要其他定义,请查看 regular expression summary in the Pattern
api .
使用String.replaceAll(regularExpression, replacementText)
要使用的正则表达式是 "\b\w{4}\b"
。
\b
是“字边界”\w
是“单词字符”{4}
是要匹配的“之前”符号的数量(在本例中为单词字符)
所以要替换字符串 text
中的所有 4 个字母的单词(注意所有 \
都被另一个 \
转义) :
text = text.replaceAll("\\b\\w{4}\\b", "replaced");
例如:
System.out.println("bla blaa hello test".replaceAll("\\b\\w{4}\\b", "mupp"));
输出:
bla mupp hello mupp
回答您更新后的问题:
下面的代码产生了这个截图:
代码:
public static void main(String[] args) {
final JTextArea area = new JTextArea("bla blaa hello test");
final JTextField numberField = new JTextField("4", 10);
final JTextField replaceField = new JTextField("muff", 10);
JButton button = new JButton(new AbstractAction("Replace") {
public void actionPerformed(ActionEvent event) {
String text = area.getText();
int syms = Integer.parseInt(numberField.getText());
String repl = replaceField.getText();
area.setText(text.replaceAll("\\b\\w{"+syms+"}\\b", repl));
}
});
JPanel panel = new JPanel();
panel.add(numberField);
panel.add(replaceField);
panel.add(button);
JFrame frame = new JFrame("Test");
frame.add(area, BorderLayout.CENTER);
frame.add(panel, BorderLayout.NORTH);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 300);
frame.setVisible(true);
}
关于Java代码问题: search and replace,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7295127/