各位兄弟,大家好。
我有个问题想问你们 ,急死了。
是这样的。 有个.txt文件,我现在需要解析这个文件。得到值。
里面是这样的。假如有aa,bb,2个值。
里面应该是 : aa!@bb!@ 如果是空的话,假如就aa,
里面应该是 : aa!@!@空的话,中间就什么也不加! 它们的分隔符用!@我现在怎么得到aa,bb的值, 怎么判断 !@ 跟!@之间没有值啊?
请指教~~ 谢谢了。
我有个问题想问你们 ,急死了。
是这样的。 有个.txt文件,我现在需要解析这个文件。得到值。
里面是这样的。假如有aa,bb,2个值。
里面应该是 : aa!@bb!@ 如果是空的话,假如就aa,
里面应该是 : aa!@!@空的话,中间就什么也不加! 它们的分隔符用!@我现在怎么得到aa,bb的值, 怎么判断 !@ 跟!@之间没有值啊?
请指教~~ 谢谢了。
我说的很清楚了。
就是一个.txt文件里,怎么判断 !@ 跟!@之间没有值假如 正常的是: aa!@bb!@ 这个是标准情况下它有可能是: aa!@!@ 那我想得到bb="" 这样 !
String s="aa!@bb!@";
String[] arr=s.split("!@");
for(String t:arr){
if(!"".equals(t)){
System.out.println(t);
}
}
}
String str = "aa!@!@";
String[] ss =str.split("!@");
此时ss只包含一个"aa"字符,因为两个"!@"之间并没有任何东西。
这种方式不能直接用来处理太大的字符串,文件小的话应该还是比较用的。
可以根据文件结构来做一个变通。
不是可以得到一个字符串数组吗?
String string="aa!@bb!@!@qq!@";
String [] strings = string.split("!@");
System.out.println(strings.length);
for(String s:strings){
System.out.println("****"+s+"****");
}
testString.split("!@");就是读一行然后分隔一下不就行了吗?
还有什么特殊的需求吗?
lz应该是希望bb也要有个""值
所以split应该要两个参数split("!@", -1)
String str2 = "aa!@!@"; String[] strArray2 = str2.split("!@", -1);
System.out.println(strArray2.length); for(String s : strArray2){
if ("".equals(s))
System.out.print("null");//会打印出2个null,最后一个null是字符串末尾的null,可以去掉。
System.out.print(s +" ");
}
}
System.out.print("\"\"");
String[] arr=s.split("(!@)+");
可以只得到非空的值放在数组中.
假如 .txt有这么一行数据。我现在要得到值。
如果!@跟!@之间 什么也没有的话 就输出“”. 怎么做??
各位大侠!
用于分隔字符串还有,分隔符分开的一定是 aa 和 bb 吗,不会有别的字符?要不要考虑换行?最后,你的程序希望得到什么样的输出?是字符串、字符串数组还是一个List?比如字符串是:
aa!@bb!@!@!@aa!@aa!@bb!@test!@3333333!@
abcdefg!@sssssss!@vvvvv!@!@!@!@输出的应该是什么?
test.txt中的内容是
aa!@bb!@
aa!@!@import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class FileChannelTest {
public static void main(String[] args) throws IOException{
String path = "D:\\test.txt";
BufferedReader in=new BufferedReader(new FileReader(path));
String str;
Pattern pattern=Pattern.compile("(?<=!@)(?=!@)");
Matcher matcher=null;
while((str=in.readLine())!=null){
matcher=pattern.matcher(str);
if(matcher.find())
System.out.println("只有a值,没有b值");
else
System.out.println("a和b都有值");
}
in.close();
}}
输出:aa,bb,"","",aa,aa,bb,test,3333333,
abcdefg,sssssss,vvvvv,"","","",
str=str.replaceAll("(?<=!@)(?=!@)"," ");//在两个连续的!@之间插入一下空格.
System.out.println(str);
String[] result=str.split("(!@)+");
System.out.println(Arrays.toString(result));
str=str.replaceAll("(? <=!@)(?=!@)","\"\"");//在两个连续的!@之间插入一对"".
String text = source;
String sep = "!@";
String pre = "";
while(true){
int index = text.indexOf(sep);
if(index < 0){
System.out.print(text);
break;
}
String pice = text.substring(0, index);
text = text.substring(index + 2);
System.out.print(pre);
System.out.print(pice);
pre = ",";
}
String text = source;
String sep = "!@";String pre = "";
while(true){
int index = text.indexOf(sep);
if(index < 0){
System.out.print(text);
break;
}
String pice = text.substring(0, index);
text = text.substring(index + 2);
System.out.print(pre);
System.out.print(pice);
pre = ",";
}
经测试应该可以达到楼主要求但这种做法必须一次性把字符串全部读入内存,然后再进行分析。如果文本文件太大,则这个办法可行性不高
String str = "ee!@aaaaa!@bbbbb!@!@!@20100909!@!@yy_wldm!@!@汽车!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@tt!@!@!@!@"; String[] strArray = str.split("!@", -1);
System.out.println(strArray.length); for(int i=0; i<strArray.length-1; i++){
if ("".equals(strArray[i]))
System.out.print("\"\"");
System.out.print(strArray[i] +" ");
}
}
输出:
29
ee aaaaa bbbbb "" "" 20100909 "" yy_wldm "" 汽车 "" "" "" "" "" "" "" "" "" "" "" "" "" "" tt "" "" ""
public class Test {
public static void main(String[] args) { String test1 = "ee!@aaaaa!@bbbbb!@!@!@20100909!@!@yy_wldm!@!@汽车!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@tt!@!@!@!@"; String[] test1Strings = test1.split("!@", -1); for (int i = 0; i < test1Strings.length - 1; i++) {
// 如果格式肯定是x!@x!@[email protected]!@,由于尾部是!@则最后产生的字符串数组一定会多一个"",所以长度要减1
System.out.println(test1Strings[i]+"空");
}
}
}
这样就好用了。楼主试试。如假包换