2013-08-22 59 views
0

用戶將在分號作爲分號的文本框中輸入電子郵件ID。在存入數據庫之前,我想驗證輸入的電子郵件ID是否有效。所以我開始使用分割。但問題是,當用戶在這種情況下輸入'[email protected];;;',這個值時,我想要驗證刪除不需要的字符。Java分割問題

我以爲分裂將返回長度將是4,然後我可以檢查爲空或空。但是分割返回長度只有一個。所以還有額外的字符存儲在數據庫中。任何幫助來解決這個問題?

回答

2

split方法默認在分割文本時丟棄尾隨空字符串。如果您確實需要結尾的空字符串,請使用split that takes two arguments的重載版本 - 第二個參數limit可以是負數,並且它會告知split不放棄尾隨的空字符串。

但我不明白爲什麼你會想要尾隨的空字符串。 split方法通常會爲您丟棄它們。

+0

此外,您可以分裂; +它將'跳過'在輸入字符串中間的空電子郵件 – rolfl

0

使用split()後,您將擁有數組中的所有電子郵件ID並可以驗證它們。驗證之後,不是使用原始字符串,而是使用數組重建字符串。這消除了你有任何重複的分號。使用StringBuffer作爲建築物,連接多個字符串的效率稍高一些。

0

做這種方式來驗證,並得到一個長度

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

肯定您可能意指'if(!(「」。equals(s))) {......' – rolfl

+0

赦免雙關語,但沒有分裂頭髮的點;) – Jabrown207

+0

不分裂頭髮.....'String.split()'永遠不會返回空值,只有空字符串'「」'。 'if(null!= s)'將始終返回true。 ...見http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#split(java.lang.String) – rolfl

0

會是這樣的幫助:

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

      } 
      } 

} 
+0

電子郵件不能在單個正則表達式中解析。看到這個:http://davidcel.is/blog/2012/09/06/stop-validating-email-addresses-with-regex/ – rolfl

+0

ahh很好找,謝謝! – Petro

0

首先,使用什麼本質上是一個列表一個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在空<>