Java拆分问题

Java拆分问题,java,split,Java,Split,用户将在文本框中以分号作为分隔符输入电子邮件ID。在存储到数据库之前,我想验证输入的电子邮件id是否有效。所以我开始使用split。但问题是,当用户输入像这样的值时xxxx@gmail.com;;;',在本例中,我希望验证以删除不需要的字符 我想split会返回长度为4,然后我可以检查是否为空或null。但将返回长度拆分为一个。因此,除了存储在数据库中的额外字符之外。解决此问题的任何帮助?默认情况下,split方法在拆分文本时会丢弃尾随的空字符串。如果确实需要尾部空字符串,请使用重载版本的--第

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


我想split会返回长度为4,然后我可以检查是否为空或null。但将返回长度拆分为一个。因此,除了存储在数据库中的额外字符之外。解决此问题的任何帮助?

默认情况下,
split
方法在拆分文本时会丢弃尾随的空字符串。如果确实需要尾部空字符串,请使用重载版本的--第二个参数
limit
可以是负数,它告诉
split
不要丢弃尾部空字符串


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

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

这样做可以验证并获得长度

 String values = textBox1.getText();
        String[] split = values.split(";");
        System.out.println(split.length);
        for(String s : split) {
            if(null != s)
                //do junk
        }

是否需要以下帮助:

    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;
             }
          }

          }
          }

 }

首先,对本质上是列表的内容使用
JTextField
似乎不切实际。您应该做的是创建一个
JList
,每个项目代表一封电子邮件,然后添加/删除按钮,通过
DefaultListModel
修改列表。之后,要检索所有元素(电子邮件地址),您可以调用
.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.awt.BorderLayout;
导入java.awt.GridLayout;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.util.Enumeration;
导入java.util.LinkedList;
导入java.util.List;
导入javax.swing.DefaultListModel;
导入javax.swing.JButton;
导入javax.swing.JList;
导入javax.swing.JOptionPane;
导入javax.swing.JPanel;
导入javax.swing.JScrollPane;
公共类EmailList扩展JPanel实现ActionListener{
私人最终名单;
私人最终违约清单模型;
私人最终JScrollPane滚动条;
私有最终JButton addButton;
私有最终JButton removeButton;
私人最终JPanel按钮面板;
公共电子邮件列表(){
超级(新边框布局());
addButton=新的JButton(“添加”);
addButton.addActionListener(此);
removeButton=新的JButton(“移除”);
removeButton.addActionListener(此);
buttonPanel=newJPanel(新网格布局(1,2,5,0));
按钮面板。添加(添加按钮);
按钮面板。添加(移除按钮);
model=新的DefaultListModel();
列表=新JList();
list.setModel(model);
滚动=新的JScrollPane(列表);
添加(按钮面板,边框布局。北);
添加(滚动、边框布局、居中);
}
私有布尔有效(最终字符串电子邮件){
//查看此处的电子邮件是否有效
返回true;
}
公开名单电邮(){
最终列表电子邮件=新建LinkedList();
最终枚举元素=model.elements();
while(elements.hasMoreElements())
emails.add(elements.nextElement());
回复邮件;
}
已执行的公共无效行动(最终行动事件e){
最终对象源=e.getSource();
if(source.equals(addButton)){
最终字符串输入=JOptionPane.showInputDialog(null,“输入电子邮件地址”);
if(input==null | | input.trim().isEmpty())
返回;
最终字符串email=input.trim();
如果(!有效(电子邮件)){
showMessageDialog(null,“该电子邮件无效”);
返回;
}
模型.附录(电子邮件);
list.repaint();
}else if(source.equals(removeButton)){
final int i=list.getSelectedIndex();
if(i<0)
返回;
模型移除元素(i);
list.repaint();
}
}
}

只是一个小提示,我是用Java8编写的,所以您可能需要做一些小的更改在空的<代码>

中,只有更改才可以打开;+可以在输入字符串中间跳过“空电子邮件”。电子邮件不能在单个正则表达式中解析。参见:不分裂毛发…<代码> String。SPLIT()/代码>将永远不会返回空值,只返回空字符串<代码>。
如果(null!=s)
将始终返回true…请参阅