求一快速截取字符串算法 形如 23~abcd,34~jgeisj,454~kdsfl,35~dsf,f~csdn/csdn的字符串,给定三个数字,如34,35,23,快速得到字符串 jgeisj dsf abcd怎么做? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 package com.saturday.string;import java.util.Arrays;import java.util.HashMap;import java.util.Map;public class IPMatcher { public static void main(String[] args){ String s="23~abcd,34~jgeisj,454~kdsfl,35~dsf,f~csdn/csdn"; String[] vals=getVal(s,"34","35","23"); System.out.println(Arrays.asList(vals)); } public static String[] getVal( String mapStr, String... keys){ if(mapStr==null ||mapStr.equals("") ||keys.length==0){ return null; } String[] ret=new String[keys.length]; Map<String,String> map=new HashMap<String,String>(); String[] etys=mapStr.split(","); String[] datas; for(String ety:etys){ datas=ety.split("~"); map.put(datas[0].trim(),datas[1].trim()); } for(int i=0,len=keys.length;i<len;i++){ ret[i]=map.get(keys[i]); } return ret; }} import java.util.HashMap;import java.util.Map;public class StringTest { /** * @param args */ public static void main(String[] args) { String str = "23~abcd,34~jgeisj,454~kdsfl,35~dsf,f~csdn/csdn"; String[] strArray = str.split(","); Map map = new HashMap(); for(String s : strArray){ if(null !=s && !"".equals(s.trim())){ String[] sArr = s.split("~"); map.put(sArr[0], sArr[1]); } } String outKey = "34,35,23"; String[] outKeyArr = outKey.split(","); for(String key : outKeyArr){ if(null!=map.get(key)) System.out.println(key + ": " + map.get(key)); } }} #5,#6的方法都会多次遍历String内部的字符数组,不是我想找的方法。 import java.util.Map;import java.util.HashMap;public class StringSplit { public static String getByNumStr(String strString,String strNum){ String[] arr=strString.split(","); Map<String,String> map=new HashMap<String, String>(); String[] arrTmp=null; for(String s:arr){ arrTmp=s.split("~"); map.put(arrTmp[0], arrTmp[1]); } return map.get(strNum); } /** * @param args */ public static void main(String[] args) { String strString="23~abcd,34~jgeisj,454~kdsfl,35~dsf,f~csdn/csdn"; System.out.println(getByNumStr(strString,"35")); }} String s = "23~abcd,34~jgeisj,454~kdsfl,35~dsf,f~csdn/csdn"; String regex = "(23|34|35)~[^,]+"; Pattern p; Matcher m; p = Pattern.compile(regex); m = p.matcher(s); while (m.find()) { System.out.println(m.group()); }先把符合条件的找出来扔到hashmap里面在这些符合条件的字符串里面找相对比较快 求解:Java里的接口(interface)的作用,什么情况下会用到接口 很无聊的Java,ZangXT进 一段 JTree 相关代码 帮忙看看 指导一下 <求助>java运行难题~ 关于接口的简单使用,请教一下大家! 有了PrepareStatement,还有必要用Statement么? 我的第一个applet,有问题请教! 請教JTable的兩种事件和一個問題 向高手求救啊 adt-elicpse快捷键的使用 如何在java应用程序中播放flash 正规表达式,只保留html图片代码当中的src="",去掉里面的其它代码
import java.util.HashMap;
import java.util.Map;public class IPMatcher {
public static void main(String[] args){
String s="23~abcd,34~jgeisj,454~kdsfl,35~dsf,f~csdn/csdn";
String[] vals=getVal(s,"34","35","23");
System.out.println(Arrays.asList(vals));
}
public static String[] getVal(
String mapStr,
String... keys){
if(mapStr==null
||mapStr.equals("")
||keys.length==0){
return null;
}
String[] ret=new String[keys.length];
Map<String,String> map=new HashMap<String,String>();
String[] etys=mapStr.split(",");
String[] datas;
for(String ety:etys){
datas=ety.split("~");
map.put(datas[0].trim(),datas[1].trim());
}
for(int i=0,len=keys.length;i<len;i++){
ret[i]=map.get(keys[i]);
}
return ret;
}
}
import java.util.Map;
public class StringTest { /**
* @param args
*/
public static void main(String[] args) {
String str = "23~abcd,34~jgeisj,454~kdsfl,35~dsf,f~csdn/csdn";
String[] strArray = str.split(",");
Map map = new HashMap();
for(String s : strArray){
if(null !=s && !"".equals(s.trim())){
String[] sArr = s.split("~");
map.put(sArr[0], sArr[1]);
}
}
String outKey = "34,35,23";
String[] outKeyArr = outKey.split(",");
for(String key : outKeyArr){
if(null!=map.get(key))
System.out.println(key + ": " + map.get(key));
}
}
}
import java.util.Map;
import java.util.HashMap;public class StringSplit {
public static String getByNumStr(String strString,String strNum){
String[] arr=strString.split(",");
Map<String,String> map=new HashMap<String, String>();
String[] arrTmp=null;
for(String s:arr){
arrTmp=s.split("~");
map.put(arrTmp[0], arrTmp[1]);
}
return map.get(strNum);
} /**
* @param args
*/
public static void main(String[] args) {
String strString="23~abcd,34~jgeisj,454~kdsfl,35~dsf,f~csdn/csdn";
System.out.println(getByNumStr(strString,"35")); }}
String s = "23~abcd,34~jgeisj,454~kdsfl,35~dsf,f~csdn/csdn";
String regex = "(23|34|35)~[^,]+";
Pattern p;
Matcher m;
p = Pattern.compile(regex);
m = p.matcher(s);
while (m.find()) {
System.out.println(m.group());
}
先把符合条件的找出来
扔到hashmap里面
在这些符合条件的字符串里面找
相对比较快