用戶將在分號作爲分號的文本框中輸入電子郵件ID。在存入數據庫之前,我想驗證輸入的電子郵件ID是否有效。所以我開始使用分割。但問題是,當用戶在這種情況下輸入'[email protected];;;',
這個值時,我想要驗證刪除不需要的字符。Java分割問題
我以爲分裂將返回長度將是4,然後我可以檢查爲空或空。但是分割返回長度只有一個。所以還有額外的字符存儲在數據庫中。任何幫助來解決這個問題?
用戶將在分號作爲分號的文本框中輸入電子郵件ID。在存入數據庫之前,我想驗證輸入的電子郵件ID是否有效。所以我開始使用分割。但問題是,當用戶在這種情況下輸入'[email protected];;;',
這個值時,我想要驗證刪除不需要的字符。Java分割問題
我以爲分裂將返回長度將是4,然後我可以檢查爲空或空。但是分割返回長度只有一個。所以還有額外的字符存儲在數據庫中。任何幫助來解決這個問題?
split
方法默認在分割文本時丟棄尾隨空字符串。如果您確實需要結尾的空字符串,請使用split
that takes two arguments的重載版本 - 第二個參數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
}
肯定您可能意指'if(!(「」。equals(s))) {......' – rolfl
赦免雙關語,但沒有分裂頭髮的點;) – Jabrown207
不分裂頭髮.....'String.split()'永遠不會返回空值,只有空字符串'「」'。 'if(null!= s)'將始終返回true。 ...見http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#split(java.lang.String) – rolfl
會是這樣的幫助:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test{
public static void main(String args[]){
String line = "'[email protected];;;',";
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<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
在空<>
此外,您可以分裂; +它將'跳過'在輸入字符串中間的空電子郵件 – rolfl