0

用户将在文本框中输入电子邮件 ID,并以分号作为分隔符。在存储到数据库之前,我想验证输入的电子邮件 ID 是否有效。所以我开始使用拆分。但问题是,当用户'xxxx@gmail.com;;;',在这种情况下输入值时,我想验证以删除不需要的字符。

我认为 split 将返回长度为 4,然后我可以检查是否为空或 null。但是将返回长度拆分为一个。因此,它连同额外的字符一起存储在数据库中。有什么帮助解决这个问题吗?

4

5 回答 5

2

默认情况下,该split方法在拆分文本时会丢弃尾随的空字符串。如果你真的想要尾随的空字符串,那么使用带有split两个参数的重载版本——第二个参数limit可以是负数,它告诉split不要丢弃尾随的空字符串。

但我不明白你为什么想要尾随的空字符串。该split方法通常会为您丢弃它们。

于 2013-08-22T19:18:20.220 回答
0

使用 split() 后,您将在一个数组中拥有所有假定的电子邮件 ID,并可以验证它们。验证后,不使用原始字符串,而是使用数组重建字符串。这消除了您拥有的任何重复的分号。使用 StringBuffer 进行构建,连接多个字符串的效率略高。

于 2013-08-22T19:28:44.673 回答
0

像这样的帮助:

    import java.util.regex.Matcher;
    import java.util.regex.Pattern;



public class Test{
 public static void main(String args[]){
  String line = "'xxxx@gmail.com;;;',";
    if(line.contains("@")){
        int x=0;
       for (String valueBetweenCommas: line.split("'", 2)){
           x++;
          if(x==2){
             Pattern p = Pattern.compile("[\\w]*([.+]??[\\w]+?)+?[\\w]@[\\w]+[.][a-zA-Z]{2,5}+$");  
             Matcher m = p.matcher(valueBetweenCommas);  
             boolean result = m.matches();
             if(result){
                 //add to database
             }else{
                 break;
             }
          }

          }
          }

 }
于 2013-08-22T19:39:32.880 回答
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

首先,将 aJTextField用于本质上是一个列表的内容似乎是不切实际的。相反,您应该做的是让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 回答