📄 parser.java
字号:
/*
* Funambol is a mobile platform developed by Funambol, Inc.
* Copyright (C) 2003 - 2007 Funambol, Inc.
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU Affero General Public License version 3 as published by
* the Free Software Foundation with the addition of the following permission
* added to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED
* WORK IN WHICH THE COPYRIGHT IS OWNED BY FUNAMBOL, FUNAMBOL DISCLAIMS THE
* WARRANTY OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program; if not, see http://www.gnu.org/licenses or write to
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301 USA.
*
* You can contact Funambol, Inc. headquarters at 643 Bair Island Road, Suite
* 305, Redwood City, CA 94063, USA, or at email address info@funambol.com.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU Affero General Public License version 3.
*
* In accordance with Section 7(b) of the GNU Affero General Public License
* version 3, these Appropriate Legal Notices must retain the display of the
* "Powered by Funambol" logo. If the display of the logo is not reasonably
* feasible for technical reasons, the Appropriate Legal Notices must display
* the words "Powered by Funambol".
*
*
*/
package com.funambol.mailclient.ui.utils;
import com.funambol.util.ChunkedString;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Vector;
public class Parser {
private static String[] VALID_PREFIX= { "http://", "www.", "ftp://", "https://" } ;
private static int MIN_PHONE_NUMER_LEN=4;
/**
* Creates a new instance of Parser
*/
private Parser() {
}
/*
* Provides an enumeration of String containing links got from a text
* Links can be URL or email addresses
*/
public static Enumeration extractLinks(String text) {
String[] sep = {
" ",
"\n\r",
"\r\n",
"\n",
",",
"\r"};
Hashtable links = new Hashtable();
ChunkedString cs = new ChunkedString(text);
String word;
while ( (word=cs.getNextString(sep)) != null ) {
if (isLink(word) || isMailAddress(word)){
links.put(word, "");
}
}
return links.keys();
}
public static Vector extractNumbers(String text) {
Vector numbers=new Vector();
Enumeration en=split(text).elements();
while (en.hasMoreElements()) {
String el=(String)en.nextElement();
if (isPhoneNumber(el)) {
numbers.addElement(el);
}
}
return numbers;
}
public static Vector split( String text, String separator ){
Vector result = new Vector();
int start=0;
//Log.debug("index=" + text.indexOf(separator));
int pos=text.substring(start).indexOf(separator);
//Log.debug("pos= "+ pos);
while (pos !=-1) {
//Log.debug("Adding -" + text.substring( start, start+pos ).trim()+"-");
result.addElement(text.substring( start, start+pos ).trim());
start+=pos+separator.length();
pos=text.substring(start).indexOf(separator);
//Log.debug("pos= "+ pos);
}
//Log.debug("Adding last entry: -" + text.substring(start).trim()+ "-");
result.addElement(text.substring(start).trim());
return result;
}
public static Vector split( String text){
return split(text, " ");
}
private static boolean isLink(String el) {
for (int i=0; i<VALID_PREFIX.length;i++) {
// WARNING!! Be careful with turkish localization ,
// turkish alphabet has 2 lower-case i, string comparison may
// return unexpected results!!
if ( el.toLowerCase().startsWith(VALID_PREFIX[i])) {
return true;
}
}
return false;
}
private static boolean isMailAddress(String word){
//string like "@xxx.xxx" is not an email address
//a valid email ends at least with "x.it"
if(word.indexOf('@')>0 && word.indexOf('@')<(word.length()-4)){
return true;
}else{
return false;
}
}
// TODO: use a real isPhoneNumber function i.e. that can handle
// strings like (+39)02#8373311
private static boolean isPhoneNumber(String el) {
try {
Integer.parseInt(el);
if (el.length()>=MIN_PHONE_NUMER_LEN)
return true;
else
return false;
} catch (NumberFormatException ex){
// here we don't need a log.error output, because we have no real error!
return false;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -