用户将在文本框中输入电子邮件 ID,并以分号作为分隔符。在存储到数据库之前,我想验证输入的电子邮件 ID 是否有效。所以我开始使用拆分。但问题是,当用户'xxxx@gmail.com;;;',
在这种情况下输入值时,我想验证以删除不需要的字符。
我认为 split 将返回长度为 4,然后我可以检查是否为空或 null。但是将返回长度拆分为一个。因此,它连同额外的字符一起存储在数据库中。有什么帮助解决这个问题吗?
默认情况下,该split
方法在拆分文本时会丢弃尾随的空字符串。如果你真的想要尾随的空字符串,那么使用带有split
两个参数的重载版本——第二个参数limit
可以是负数,它告诉split
不要丢弃尾随的空字符串。
但我不明白你为什么想要尾随的空字符串。该split
方法通常会为您丢弃它们。
使用 split() 后,您将在一个数组中拥有所有假定的电子邮件 ID,并可以验证它们。验证后,不使用原始字符串,而是使用数组重建字符串。这消除了您拥有的任何重复的分号。使用 StringBuffer 进行构建,连接多个字符串的效率略高。
像这样的帮助:
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;
}
}
}
}
}
这样做以验证并获得长度
String values = textBox1.getText();
String[] split = values.split(";");
System.out.println(split.length);
for(String s : split) {
if(null != s)
//do junk
}
首先,将 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
空的<>