我想使用带有Java的正则表达式创建开始注释检测器
我正在使用JTextArea
区域粘贴源代码程序和JTextArea
注释作为打印注释
Pattern aaa = Pattern.compile("(/\\*([^*]|[\\r\\n]|(\\*+([^*/]|[\\r\\n])))*\\*+/)|(//.*)");
Matcher bbb =aaa.matcher(area.getText());
if(bbb.find())
{
comment.setText(bbb.group());
}
else
System.out.println ("no found");
我的输入文字:
start_code();
/****
* Common multi-line comment style.
****/
more_code();
/*
* Another common multi-line comment style.
*/
end_code();
但是程序结果
/****
* Common multi-line comment style.
****/
我希望这个程序打印出所有评论。
这是我的完整代码
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.FlowLayout;
import javax.swing.JOptionPane;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
class regex extends JFrame implements ActionListener
{
JTextArea area;
JTextArea comment1;
JButton button1;
public regex()
{
super("program");
tombol=new JButton("button1");
area=new JTextArea();
comment1=new JTextArea();
button1.addActionListener(this);
setLocation(200,200);
setSize(1100,500);
setLayout(null);
area.setBounds(10,10,450,400);
comment1.setBounds(480,10,450,400);
button1.setBounds(10,410,450,25);
add(area);
add(comment1);
add(button1);
show();
}
public void actionPerformed(ActionEvent e)
{
if(button1==e.getSource())
{
Pattern aaa=Pattern.compile("(/\\*([^*]|[\\r\\n]|(\\*+([^*/]|[\\r\\n])))*\\*+/)|(//.*)");
Matcher bbb=aaa.matcher(area.getText());
if(bbb.find())
{
comment1.setText(bbb.group());
}
else
System.out.println ("no found");
}
}
public static void main(String[] args)
{
new regex();
}
}
答案 0 :(得分:1)
您必须更改此部分:
if (bbb.find()) {
comment1.setText(bbb.group());
}
这样的事情:
while(bbb.find()) {
comment1.setText(comment1.getText()+bbb.group()+"\n");
}
因为bbb.find()会给你下一场比赛。
你也可以将你的正则表达式字符串缩短为:"(?:/ \ *(?:[^ ] |(?:\ + [^ /]) ) \ * + /)|(?://.*)"
如果您有更多问题,请询问:)
这里整个代码,这对我有用:
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
@SuppressWarnings("serial")
class RegexTest extends JFrame implements ActionListener {
JTextArea area;
JTextArea comment1;
JButton button1 = new JButton();
private JButton tombol;
public RegexTest() {
super("program");
tombol = new JButton("button1");
area = new JTextArea();
comment1 = new JTextArea();
button1.addActionListener(this);
setLocation(200, 200);
setSize(1100, 500);
setLayout(null);
area.setBounds(10, 10, 450, 400);
comment1.setBounds(480, 10, 450, 400);
button1.setBounds(10, 410, 450, 25);
add(area);
add(comment1);
add(button1);
show();
}
public void actionPerformed(ActionEvent e) {
if (button1 == e.getSource()) {
Pattern aaa = Pattern.compile("(/\\*([^*]|[\\r\\n]|(\\*+([^*/]|[\\r\\n])))*\\*+/)|(//.*)");
Matcher bbb = aaa.matcher(area.getText());
while (bbb.find()) {
comment1.setText(comment1.getText() + bbb.group() + "\n");
}
// if (bbb.find()) {
// comment1.setText(bbb.group());
// } else
// System.out.println("no found");
}
}
public static void main(String[] args) {
new RegexTest();
}
}
如果您要删除所有评论:
public void actionPerformed(ActionEvent e) {
if (button1 == e.getSource()) {
Pattern aaa = Pattern.compile("(/\\*([^*]|[\\r\\n]|(\\*+([^*/]|[\\r\\n])))*\\*+/)|(//.*)");
Matcher bbb = aaa.matcher(area.getText());
comment1.setText(bbb.replaceAll("")); //This is the new line
// while (bbb.find()) {
// comment1.setText(comment1.getText() + bbb.group() + "\n");
// }
// if (bbb.find()) {
// comment1.setText(bbb.group());
// } else
// System.out.println("no found");
}
}
这只是一个简单的想法,如果某人有更聪明的东西,比如删除空行,请编辑它。
答案 1 :(得分:0)
您可以遍历所有匹配的组:
if (bbb.find()) {
StringBuilder comments = new StringBuilder();
for (int g = 0; g < bbb.groupCount(); g++) {
comments.append(bbb.group(g));
}
comment.setText(comments.toString());
}
答案 2 :(得分:0)
如果我想找到所有方法?
示例:
class example
{
public void ex1()
{
statement;
}
private string ex2(int a)
{
return 0;
}
example(){
statement;
}
}
结果程序:
ex1() : void
ex2(a : int) : string
example()
也使用正则表达式。
答案 3 :(得分:0)
回答你的第二个问题。你可以尝试类似的东西,只需将它放在你的班级中:
public void actionPerformed(ActionEvent e) {
if (button1 == e.getSource()) {
Pattern aaa = Pattern.compile("(public|protected|private|static|\\s) +[\\w\\<\\>\\[\\]]+\\s+(\\w+) *\\([^\\)]*\\) *(\\{?|[^;])");
Matcher bbb = aaa.matcher(area.getText());
while (bbb.find()) {
comment1.setText(comment1.getText() + bbb.group() + "\n");
}
}
}
它的格式不像你的想法,但我认为它符合你的要求。
你不应该把新问题作为答案发布,开一个新问题。请将正确答案标记为正确。