所以基本上对于我的工作,我必须创建一个applet,为特定的句子提供一个单词模式,即'我是一个男人'会给出2,1,1,因为有2个1个字母的单词,1 2字母和1个3字母的单词。更难的部分(至少对我而言)是我必须排除所有标点符号,例如我,我会以逗号为2,意思是排除为字符。
我的讲师说这段代码应该有效
str = str.replaceAll("[^A-Za-z]", "");
但问题是我不知道如何将它集成到我的applet中,花了很多时间看着它。这基本上是applet的最后一部分(这加上一个图表)。希望你明白我的意思,如果你可以帮助我,我将不胜感激。另外,我还没有真正教过str.replace。
这是我到目前为止所做的(希望我正确地把它放进去)
import java.util.*;
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class clarke_j_reass extends Applet implements ActionListener
{
Button pr_input1, pr_input2;
Label pr_label;
TextField pr_text;
String pr_name;
public void init()
{
pr_input1 = new Button("Analyze");
pr_input2 = new Button("Reset");
add(pr_input1);
add(pr_input2);
pr_input1.addActionListener(this);
pr_input2.addActionListener(this);
//add the buttons with action listeners
pr_label = new Label("Word Pattern");
add(pr_label);
pr_text = new TextField();
add(pr_text);
pr_text.addActionListener(this);
//add text field
}
public void start()
{
pr_name="";
setSize(400,400);
setBackground(Color.gray);
pr_text.setBackground(Color.white);
}
public void actionPerformed(ActionEvent e){
pr_name = e.getActionCommand();
repaint();
if(e.getSource() == pr_input1)
pr_name = pr_text.getText();
else
if(e.getSource() == pr_input2)
{ pr_name = "";
pr_text.setText("");
}
repaint();
// The user's input from the text area.
int pr_char;
String array[]=pr_name.split(" ");
int counter=0;
for(int i=0;i<array.length;i++)
if(counter<array[i].length())
counter=array[i].length();
int intArray[]=new int[counter];
for(int i=0;i<intArray.length;i++){
intArray[i]=0;
}
for(int i=0;i<array.length;i++){
intArray[array[i].length()-1]++;
}
String a="";
for(int i=0;i<intArray.length;i++){
if(intArray[i]>0)
{
a+=String.valueOf(intArray[i]);
a+=", ";
}
}
pr_label.setText(a);
pr_char = pr_name.length();
}
public void paint(Graphics g)
{
// g.setColor(pr_col);
// g.drawString(pr_name,0,250);
pr_text.setSize(400, 200);
pr_text.setLocation(0,0);
pr_input1.setLocation(150,220);
pr_input2.setLocation(200,220);
pr_label.setLocation(0,270);
pr_label.setSize(400,30);
}
}
空格不是问题,因为代码不包括它们,我只查找单词。我现在的问题是当我把代码放在我告诉的地方时没有给我正确的模式并且jut将其限制为1.即我是一个男人出来1,而不是2,1,1,< / p>
答案 0 :(得分:1)
将array[i].length()
定义为:
length
的所有实例替换为循环中的变量length
int length = array[i].replaceAll("[^A-Za-z]", "").length();
替换:
for(int i=0;i<array.length;i++)
if(counter<array[i].length())
counter=array[i].length();
使用:
for(int i=0;i<array.length;i++) {
int length = array[i].replaceAll("[^A-Za-z]", "").length();
if(counter<length)
counter=length;
}
答案 1 :(得分:0)
这是正则表达式的示例。 replaceAll 调用中的第一个字符串定义了它所寻找的模式。
在这种情况下,“^”字符表示“not”,“A-Za-z”表示全部大写和小写字母。所以整体模式意味着,任何不是一封信。如果你想拆分空格,这是错误的模式,所以你还必须添加“\ s”来包含空格字符。因此,电话:
str = str.replaceAll("[^A-Za-z\s]", "")
将使用空字符串替换任何不是字母或空白字符的内容。
在您的程序中,您将在执行字符串处理之前插入此调用。像这样:
pr_name = pr_name.replaceAll("[^A-Za-z\s]", "")
String array[]=pr_name.split(" ");
答案 2 :(得分:0)
替换
for(int i=0;i<array.length;i++){
intArray[array[i].length()-1]++;
}
与
for(int i=0;i<array.length;i++){
intArray[array[i].replaceAll("[^A-Za-z]", "").length()-1]++;
}
答案 3 :(得分:-1)
将教师的建议放在上面:
String array[]=pr_name.split(" ");
您似乎将文本字符串存储为pr_name,因此在拆分空格之前,您可以删除其他字符。它应该是这样的:
pr_name = pr_name.replaceAll("[^a-zA-Z\s:]", "");
String array[]=pr_name.split(" ");