我仿照windows 下的记事本,用java编写了一个,可是到具体的查找功能实现的时候,就不知道如何实现了,哪位高手愿意点拨一下,感激不尽,我要求查找的实现和windows下记事本查找的功能一样,我自己写了一个框架,到事件的响应就不太会了,谢谢大家帮我完善一下
class Serach extends Frame implements ActionListener,ItemListener{
Label label;
TextField textfield;
Button button1,button2;
Checkbox box1,box2,box3;
CheckboxGroup towards;
Serach(String s){
super(s);
setSize(400,150);
setLayout(new FlowLayout());
label=new Label("查找内容(N)");
textfield=new TextField(15);
button1=new Button("查找下一个");
button2=new Button("取消");
box1=new Checkbox("区分大小写(C)");
box2=new Checkbox("向上(U)",false,towards);
box3=new Checkbox("向下(D)",true,towards);
textfield.addActionListener(this);
button1.addActionListener(this);
button2.addActionListener(this);
box1.addItemListener(this);
box2.addItemListener(this);
box3.addItemListener(this);
add(label); add(textfield);
add(button1); add(box1);
add(box2); add(box3);
add(button2);
setVisible(true);
validate();
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
setVisible(false);
}
});
} public void actionPerformed(ActionEvent e) {
if(e.getSource()==button2){
System.exit(0);
}
else if(e.getSource()==button1||e.getSource()==textfield){
try{
String s,t;
t=textfield.getText();
DMenu d = null;
s=d.text.getText();

StringTokenizer fenxi=new StringTokenizer(s," ,,");
int n=fenxi.countTokens();
String a[]=new String [n];
for(int i=0;i<fenxi.countTokens();i++){
if(a[i].equals(t)){

}
}
}
catch(Exception ee){
textfield.setText("无匹配内容");
}
}
// TODO Auto-generated method stub

} public void itemStateChanged(ItemEvent e) {
// TODO Auto-generated method stub

}

}
在for里面如何实现查找,我就不太会了,答对50分双手奉上
再次感谢您的关注

解决方案 »

  1.   

    用delphi做过,楼主可以参考。
    var
      NotepadForm: TNotepadForm;const
      defaultfilename = 'noname';implementationuses
      SysUtils, Mapi, about, SHFolder;{$R *.dfm}resourcestring
      SUntitled  = 'Untitled';
      SOverwrite = 'OK to overwrite %s';
      SSendError = 'Error sending mail';function DefaultSaveLocation: string;
    var
      P: PChar;
    begin
      P := nil;
      try
        P := AllocMem(MAX_PATH);
        if SHGetFolderPath(0, CSIDL_PERSONAL, 0, 0, P) = S_OK then
          Result := P
        else
          Result := GetCurrentDir;
      finally
        FreeMem(P);
      end;
    end;procedure TNotepadForm.FileNew1Execute(Sender: TObject);
    var
      mr : word;begin
      if RichEdit1.Modified then
      begin
        mr := MessageDlg('Text is modified, save or not?',mtConfirmation, mbYesNoCancel, 0);
        if mr = mryes then
        begin
          ToolButton3.Click;
        end
        else if mr = mrCancel then
          abort;
      end;
      NotepadForm.Caption :='noname';
      SaveDialog.InitialDir := DefaultSaveLocation;
      FFileName := SUntitled;
      RichEdit1.Lines.Clear;
      RichEdit1.Modified := False;
    end;procedure TNotepadForm.FileOpen1Execute(Sender: TObject);
    begin
      if OpenDialog.Execute then
      begin
        RichEdit1.Lines.LoadFromFile(OpenDialog.FileName);
        FFileName := OpenDialog.FileName;
        NotepadForm.Caption := FFileName;
        RichEdit1.SetFocus;
        RichEdit1.Modified := False;
        RichEdit1.ReadOnly := ofReadOnly in OpenDialog.Options;
      end;
    end;procedure TNotepadForm.FileSave1Execute(Sender: TObject);
    begin
      if (FFileName = SUntitled) or (FFileName = '') then
        FileSaveAs1Execute(Sender)
      else
      begin
        RichEdit1.Lines.SaveToFile(FFileName);
        RichEdit1.Modified := False;
      end;
    end;procedure TNotepadForm.FileSaveAs1Execute(Sender: TObject);
    begin
      with SaveDialog do
      begin
        FileName := FFileName;
        if Execute then
        begin
          if FileExists(FileName) then
            if MessageDlg(Format(SOverwrite, [FileName]),
              mtConfirmation, mbYesNoCancel, 0) <> idYes then Exit;
          RichEdit1.Lines.SaveToFile(FileName);
          FFileName := FileName;
          RichEdit1.Modified := False;
        end;
      end;
    end;procedure TNotepadForm.FileSend1Execute(Sender: TObject);
    var
      MapiMessage: TMapiMessage;
      MError: Cardinal;
    begin
      with MapiMessage do
      begin
        ulReserved := 0;
        lpszSubject := nil;
        lpszNoteText := PChar(RichEdit1.Lines.Text);
        lpszMessageType := nil; 
        lpszDateReceived := nil; 
        lpszConversationID := nil; 
        flFlags := 0;
        lpOriginator := nil; 
        nRecipCount := 0;
        lpRecips := nil;
        nFileCount := 0;
        lpFiles := nil; 
      end;  MError := MapiSendMail(0, Application.Handle, MapiMessage,         
        MAPI_DIALOG or MAPI_LOGON_UI or MAPI_NEW_SESSION, 0);
      if MError <> 0 then MessageDlg(SSendError, mtError, [mbOK], 0);
    end;procedure TNotepadForm.FileExit1Execute(Sender: TObject);
    begin
      Close;
    end;procedure TNotepadForm.HelpAbout1Execute(Sender: TObject);
    begin
      AboutBox.ShowModal;
    end;procedure TNotepadForm.FormCreate(Sender: TObject);
    begin
      FileNew1.Execute; { sets the default file name and clears the RichEdit Control }
      FontCombo.Items := Screen.Fonts;
      FontCombo.ItemIndex := FontCombo.Items.IndexOf (
        RichEdit1.Font.Name);
    end;procedure TNotepadForm.AutoNextline1Click(Sender: TObject);
    begin
      AutoNextline1.Checked := not AutoNextline1.Checked;
      RichEdit1.WordWrap := not RichEdit1.WordWrap;
    end;procedure TNotepadForm.N3Click(Sender: TObject);
    begin
      if RichEdit1.SelLength = 0 then
      begin   //没有选择文本
        fontdialog1.Font := RichEdit1.Font;
        if fontdialog1.Execute then
          RichEdit1.defAttributes.Assign(fontdialog1.Font);
      end
      else
      begin   //对有选择文本
        fontdialog1.Font := RichEdit1.Font;
        if fontdialog1.Execute then
          RichEdit1.selAttributes.Assign(fontdialog1.Font);
      end;
    end;
      

  2.   

    procedure TNotepadForm.Color1Click(Sender: TObject);
    begin
      colordialog1.Color := RichEdit1.SelAttributes.Color;
      if colordialog1.Execute then
        RichEdit1.SelAttributes.Color := colordialog1.Color;
    end;procedure TNotepadForm.FormCloseQuery(Sender: TObject;
      var CanClose: Boolean);
    var
      mr : word;begin
      if RichEdit1.Modified then
      begin
        mr := MessageDlg('Text is modified, save or not?',mtConfirmation, mbYesNoCancel, 0);
        if mr = mryes then
        begin
          ToolButton3.Click;
        end
        else if mr = mrCancel then
          abort;
      end;
    end;procedure TNotepadForm.BoldButtonClick(Sender: TObject);
    begin
      if BoldButton.Down then
        RichEdit1.SelAttributes.Style := RichEdit1.SelAttributes.Style + [fsBold]
      else
        RichEdit1.SelAttributes.Style := RichEdit1.SelAttributes.style - [fsBold];
    end;procedure TNotepadForm.ItalicButtonClick(Sender: TObject);
    begin
      if ItalicButton.Down then
        RichEdit1.SelAttributes.Style := RichEdit1.SelAttributes.Style + [fsItalic]
      else
        RichEdit1.SelAttributes.Style := RichEdit1.SelAttributes.style - [fsItalic];
    end;procedure TNotepadForm.UnderlineButtonClick(Sender: TObject);
    begin
    if UnderlineButton.Down then
        RichEdit1.SelAttributes.Style := RichEdit1.SelAttributes.Style + [fsunderline]
      else
        RichEdit1.SelAttributes.Style := RichEdit1.SelAttributes.style - [fsunderline];
    end;procedure TNotepadForm.leftalignButtonClick(Sender: TObject);
    begin
      RichEdit1.Paragraph.Alignment:=taleftjustify;
    end;procedure TNotepadForm.CenterAlignbuttonClick(Sender: TObject);
    begin
      RichEdit1.Paragraph.Alignment:=tacenter;
    end;procedure TNotepadForm.RightAlignbuttonClick(Sender: TObject);
    begin
      RichEdit1.Paragraph.Alignment:=tarightjustify;
    end;procedure TNotepadForm.RichEdit1SelectionChange(Sender: TObject);
    begin
      StatusBar.Panels[0].Text := Format ('Position: ' + '%d/%d',
        [RichEdit1.CaretPos.Y + 1, RichEdit1.CaretPos.X + 1]);  with RichEdit1.Paragraph do
      begin
        BoldButton.Down := fsBold in RichEdit1.SelAttributes.Style;
        ItalicButton.Down := fsItalic in RichEdit1.SelAttributes.Style;
        UnderlineButton.Down := fsUnderline in RichEdit1.SelAttributes.Style;
        n1.Checked:=fsBold in RichEdit1.SelAttributes.Style;
        n2.Checked:=fsItalic in RichEdit1.SelAttributes.Style;
        n3.Checked:=fsUnderline in RichEdit1.SelAttributes.Style;
        case Ord(Alignment) of
          0: LeftalignButton.Down := True;
          2: CenterAlignbutton.Down := True;
          1: RightAlignbutton.Down := True;
        end;
      end;
    end;procedure TNotepadForm.FontComboClick(Sender: TObject);
    begin
      RichEdit1.SelAttributes.Name := FontCombo.Text;
      RichEdit1.SetFocus;
    end;procedure TNotepadForm.SizeComboKeyPress(Sender: TObject; var Key: Char);
    begin
      if key=#13 then
      begin
        RichEdit1.SelAttributes.Size := StrtoInt(SizeCombo.Text);
        RichEdit1.SetFocus;
      end;
    end;procedure TNotepadForm.ColorBox1Change(Sender: TObject);
    begin
      RichEdit1.SelAttributes.Color := ColorBox1.Selected;
      RichEdit1.SetFocus;
    end;procedure TNotepadForm.SizeComboClick(Sender: TObject);
    begin
      RichEdit1.SelAttributes.Size := StrtoInt(SizeCombo.Text);
      RichEdit1.SetFocus;
    end;procedure TNotepadForm.ApplicationEvents1Hint(Sender: TObject);
    begin
      // show hint in the status bar message panel
      StatusBar.Panels[1].Text := Application.Hint;
    end;end.
      

  3.   

    可以考虑使用KMP算法进行查找,也可以通过建索引的方式来查找
      

  4.   

    最好也最方便的方法是用正则表达式
    不难,自己研究一下就会了
    我博客有篇文章可能有些帮助----《在java中使用正则表达是》
    http://blog.sina.com.cn/u/413f5055010005of