比如有这样一个字符串 010@ajjjjjjjjj-020@blllllllll-030@chhhhhhhhhhh
怎么样取出jjjjjjjj,lllllllll和hhhhhhhhhh
也就是每个xxx@x和-之间的字符串!
请尽快回答,我可以尽快揭贴
你从头开始判断,如果看到@就准备开始在第二个开始保存字符串。到‘-’就停止
你要如何比较,是不是你要在遇到J开头时就进行比较,
然后看此字符串是不是你要的JJJJJJJJ
String s = "010@ajjjjjjjjj-020@blllllllll-030@chhhhhhhhhhh";
String[] a = s.split("-");
for(int i = 0;i<a.length;i++)
{
a[i]=a[i].substring(a[i].indexOf("@")+1);
System.out.println(a[i]);
}
如要是上面的,你看谭浩强的<<C语言>>就可以了
String s="010@ajjjjjjjjj-020@blllllllll-030@chhhhhhhhhhh";
String p="(\\S){3}+@\\S";
String s1=s.replaceAll(p,"");
String[] s2=s1.split("-");
for(int i=0;i<s2.length;i++)
System.out.println(s2[i]);
StringTokenizer st = new StringTokenizer("010@ajjjjjjjjj-020@blllllllll-030@chhhhhhhhhhh","-");
然后再subString(3)
是不是都是0x0的格式?
那直接取“0@”比较不就可以了???
就是取0@与-之间的值
we are confused.
post your 字符串.
不能直接取@和-之间的吗???
最好把你的字符串写出来看看
这样说不清楚的
用正则表达式看看怎么样
代码如下
public class Test {
public Test() {
}
public static void main(String[] args) {
String str="010@ajjjjjjjjj-020@blllllllll-030@chhhhhhhhhhh";
args=str.split("\\-?\\d{3}@");
for(int i=1;i<args.length;i++)
System.out.println(args[i]);
}
如果达不到你的目的请告诉我改进~
String str=你需要解析的串;
StringTokenizer token=new StringTokenizer(str,"-");
String temp;
while(token.hasMoreTokens()){
temp=token.nextToken();
System.out.print(temp.substring(temp.indexof(@)+1))
}
你这个好像没有什么规律的
如:
330@a这是一本关于行走的书。它的作者群是一批被称为“驴”的自助旅行者,不在路上的日@-997@aH-540@A
这里连续出了好几个@,但-对应不上
实在没有好的解决办法就只有用笨办法了
一个个的取吧
215@c插图-000 01082nam0 2200301 450 *-215@d
这里我应该取到什么地方???
从215@c开始,取“插图”还是一直取到“*”?
你用这个"-"做分隔符,并不合适
如果数据里已经有了"-",很容易混淆的
你把下面这段代码Copy过去试试,在我这里能够得到jjjjjjjj,lllllllll和hhhhhhhhhh
String args[];
String str="010@ajjjjjjjjj-020@blllllllll-030@chhhhhhhhhhh";
args=str.split("\\-?\\d{3}@[a-zA-Z]");
for(int i=1;i<args.length;i++)
System.out.println(args[i]);
那你只有一个一个的读了,没有什么好办法的。
字符串其实不管你要取多少个,你对这个字符串进行某种操作,已经把它全部读入内存了,28个和40个并没有什么差别。
这样把,我看你的整个字符串是无序的,用一个简单一点的方法,你按-分割,然后把它们存入数据库,通过数据库排序,然后一个个的取出,很方便吧?
;)
如果所有的操作都是在客户端的,你可以把这些东西取出来以后放入树集(TreeSet)中,树集是有序的,然后你再取的时候也很方便。
应该说只能一个个的取了
没有好的办法
因为实在是没有规律啊
在DOWHILE时判断一下控制变量的值是否大于数组最大值,大于就跳出循环或是将控制变量置0再循环查找一次。
最好一次取出所有数据,用Hash表存储,然后根据需要去取数据:
String[] val = {"200@A", "200@b", "200@d", "200@e", "200@f", "200@g", "205@a", "205@f", "206@a", "207@a", "208@a", "230@a",
"210@a", "210@c", "210@d", "210@g", "210@e", "210@h", "215@a", "215@c", "215@d", "215@e", "225@a", "225@e", "225@f", "225@h", "010@a", "010@d"};
String str = "701@4编著-200@f浪子燕青,无家的人,闲适人生,稻糠木,师嫣编著-215@a204页-330@a这是一本关于";
int index = str.indexOf(@);
int index2 = str.indexOf(-, index + 1);
HashMap map = new HashMap();
while (index > 2 && index2 > 0) {
String key = str.substring(index - 3, index + 2);
String value = str.substring(index + 2, index2);
map.put(key, value);
index = str.indexOf(@, index2 + 1);
if (index > 0) {
index2 = str.indexOf(-, index + 1);
}
}
System.out.println(map.get(val[4]));
实际上,用证则表达式非常发时间,如果不是很复杂的,可以用简单的indexOf方法。
对于楼主的这个问题取字符串的条件非常简单,格式也是确定的。