0

ユーザーは、セパレータとしてセミコロンを使用して、テキスト ボックスに電子メール ID を入力します。dbに格納する前に、入力したメールIDが有効かどうかを検証したい。だから私はスプリットを使い始めました。しかし問題は、'xxxx@gmail.com;;;',この場合のようにユーザーが値を入力すると、不要な文字を削除するために検証したいということです。

分割すると長さが4になると思い、空かnullをチェックできます。ただし、返される長さを 1 つだけに分割します。そのため、追加の文字とともに DB に格納されます。これを解決するための助けはありますか?

4

5 に答える 5

2

このsplitメソッドはデフォルトで、テキストを分割するときに末尾の空の文字列を破棄します。末尾の空の文字列が本当に必要な場合は、2 つの引数を取る のオーバーロードされたバージョンを使用しsplitますlimitsplit

しかし、末尾の空の文字列が必要な理由がわかりません。メソッドは通常、splitそれらを破棄します。

于 2013-08-22T19:18:20.220 に答える
0

この方法で検証して長さを取得します

 String values = textBox1.getText();
        String[] split = values.split(";");
        System.out.println(split.length);
        for(String s : split) {
            if(null != s)
                //do junk
        }
于 2013-08-22T19:33:11.767 に答える
0

split() を使用すると、想定されるすべての電子メール ID が配列に格納され、それらを検証できます。検証後、元の文字列を使用する代わりに、配列を使用して文字列を再構築します。これにより、重複したセミコロンがなくなります。構築には StringBuffer を使用します。これは、多数の文字列を連結するのに少し効率的です。

于 2013-08-22T19:28:44.673 に答える
0

まず、JTextField本質的にリストであるものに a を使用するのは非現実的です。代わりにすべきことはJList<String>、電子メールを表す各項目を持つ を用意し、 を介してリストを変更するボタンを追加/削除することDefaultListModel<String>です。その後、すべての要素 (電子メール アドレス) を取得するには、.elements()メソッドを呼び出してそれらをトラバースします。

したがって、次のようになります。

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Enumeration;
import java.util.LinkedList;
import java.util.List;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

public class EmailList extends JPanel implements ActionListener{

private final JList<String> list;
private final DefaultListModel<String> model;
private final JScrollPane scroll;

private final JButton addButton;
private final JButton removeButton;
private final JPanel buttonPanel;

public EmailList(){
    super(new BorderLayout());

    addButton = new JButton("Add");
    addButton.addActionListener(this);

    removeButton = new JButton("Remove");
    removeButton.addActionListener(this);

    buttonPanel = new JPanel(new GridLayout(1, 2, 5, 0));
    buttonPanel.add(addButton);
    buttonPanel.add(removeButton);

    model = new DefaultListModel<>();

    list = new JList<>();
    list.setModel(model);

    scroll = new JScrollPane(list);

    add(buttonPanel, BorderLayout.NORTH);
    add(scroll, BorderLayout.CENTER);
}

private boolean valid(final String email){
    //see if email is valid in here
    return true;
}

public List<String> emails(){
    final List<String> emails = new LinkedList<>();
    final Enumeration<String> elements = model.elements();
    while(elements.hasMoreElements())
        emails.add(elements.nextElement());
    return emails;
}

public void actionPerformed(final ActionEvent e){
    final Object source = e.getSource();
    if(source.equals(addButton)){
        final String input = JOptionPane.showInputDialog(null, "Enter an email address");
        if(input == null || input.trim().isEmpty())
            return;
        final String email = input.trim();
        if(!valid(email)){
            JOptionPane.showMessageDialog(null, "That email is not valid");
            return;
        }
        model.addElement(email);
        list.repaint();
    }else if(source.equals(removeButton)){
        final int i = list.getSelectedIndex();
        if(i < 0)
            return;
        model.removeElementAt(i);
        list.repaint();
    }
}
}

ちょっとしたメモですが、私はこれをJava 8で書いたので、いくつかの小さな変更を加える必要があるかもしれません(変更のみがString空の<>

于 2013-08-22T19:46:43.790 に答える