2

したがって、基本的に私の大学の仕事では、特定の文の単語パターンを提供するアプレットを作成する必要があります。つまり、「私は男です」は 2、1、1 になります。 1 3文字の単語. 難しい部分 (少なくとも私にとって) は、すべての句読点を除外する必要があることです。

私の講師は、このコードは機能するはずだと言いまし str = str.replaceAll("[^A-Za-z]", ""); たが、問題は、それを自分のアプレットに統合する方法がわからないことです。これは基本的にアプレットの最後の部分です (これとグラフ)。うまくいけば、私が何を意味するのか理解していただければ幸いです。また、私は実際にはまだ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);
    }
}

とにかくコードにはスペースが含まれていないため、スペースは問題ではありません。単語を探すだけです。私が今抱えている問題は、私が言われたところにコードを入れたときに正しいパターンが得られず、それを1に制限することです。つまり、私は男で、2、1、1ではなく1になります

4

4 に答える 4

1

次のように定義した後、ループ内のすべてのインスタンスをarray[i].length()変数に置き換えます。lengthlength

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;
       }
于 2012-07-15T13:00:39.987 に答える
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(" ");
于 2012-07-15T12:56:27.887 に答える
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]++;
}
于 2012-07-15T13:11:07.090 に答える
-1

この上にインストラクターの提案を配置します。

String array[]=pr_name.split(" ");

テキスト文字列を pr_name として保存しているように見えるので、スペースを分割する前に、他の文字を取り除くことができます。次のように表示されます。

pr_name = pr_name.replaceAll("[^a-zA-Z\s:]", "");
String array[]=pr_name.split(" ");
于 2012-07-15T12:56:30.207 に答える