日期:2014-05-20  浏览次数:20602 次

向各位大神请教字符串处理的问题~
小弟初学java,现在遇到一个难题(简化后如下,实际上有很多组类似数据,但格式相同):


P56818
MAPALHWLLLW 126 K 17425515 NULL Littl
20100316
P56818
MAPALHWLLLW 275 K 17425515 NULL Littl
20100316
O02274
MSTTG 6 K 6706903 NULL Littl 20100317
O02274
MSTTG 13 K 6706903 NULL Littl 20100317

最后处理为
P56818@126;275
MAPALHWLLLW
O02274@6;13
MSTTG


只保留了每组数据的前三个,后面的K、NULL等等都是不要的。。
是一种相同数据的整合


希望高手指点,拜谢先!


------解决方案--------------------
定义一个 HashMap<String, List>

然后对数据文件进行处理,把“P56818”作为HashMap的Key值,后面处理到的数字不断加入List中,最终你就可以得到你要的结果了,循环输出即可。

伪代码如下:
Scanner sc = 你的文件;
HashMap<String, List> map = new HashMap
while (sc.hasNext()) {
String key = sc.readLint();
if (!map.contains(key)) {
map.put(key, new ArrayList());
}
List lst = map.get(key);
String data = sc.readLint();
String value = 处理data获得你需要的那个数字;
lst.add(value);
}
------解决方案--------------------
Java code

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class test {
    public static void main(String[] args) {
        String string = "MAPALHWLLLW 126 K 17425515 NULL Littl";
        String regex = "MAPALHWLLLW\\s(\\d+)\\sK\\s17425515\\sNULL\\sLittl";
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(string);
        if (m.matches()) {
            System.out.println(m.group(1));
        }
    }
}

------解决方案--------------------
可以用字符串的分割,然后放进集合。因为你所需要的字符都是在固定的索引。然后再循环集合,用条件语句判断指定索引,将拿到的字段拼接。