here is a big list ,I want to separate this list into two lists according to "A7750" and "A7741" 我也尝试编写代码来实现它,但它失败了
public class Test {
public static void main(String[] args) {
ArrayList<String> list=new ArrayList<String>();
ArrayList<String> list1=new ArrayList<String>();
list.add("A7750 0.0 28.30");
list.add("A7750 0.3 28.30");
list.add("A7741 0.0 31.40");
list.add("A7741 0.1 31.40");
Boolean tag=true;
for(int i=0;i<list.size();i++){
if(i>=1){
String str[]=list.get(i).split("\t");
String str1[]=list.get(i-1).split("\t");
if(tag){
list1.add(list.get(i-1));
if(!str[0].equals(str1[0])){
for(String t:list1){
System.out.println(t);
}
list1.clear();
System.out.println("...");
}
}
}
}
}
}
答案 0 :(得分:1)
您可以使用String.startsWith
检查列表中的每个字符串,从您想要的内容开始,并添加到相应的新列表中。
for(String element: bigList){
if(element.startsWith("A7750")){
list1.add(element);
}
else if(element.startsWith("A7741")){
list2.add(element);
}
}
修改强>:
如果您有数千行,则可以使用Map
存储列表,如下所示。
Map<String,List<String>> map=new HashMap<>();
for(String element: bigList){
// Split each element by space.
String parts=element.split(" ");
// if the map contains your key ex: "A7741", add the string to the corresponding list.
if(map.containsKey(parts[0])){
List<String> list = map.get(parts[0]);
list.add(element);
}else{
// create a new list and add it to the map with a new key.
List<String> list = new ArrayList<>();
list.add(element);
map.put(parts[0],list);
}
}
最后,地图会有一组列表,其中每个条目key
是其元素所盯着的字符串。
我假设您的字符串的格式类似于A7750 0.0 28.30
答案 1 :(得分:0)
这是一个应该做你想做的测试课:
public class Test {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
Map<String, List<String>> tagMap = new HashMap<>();
// Populate the list
list.add("A7750 0.0 28.30");
list.add("A7750 0.3 28.30");
list.add("A7741 0.0 31.40");
list.add("A7741 0.1 31.40");
list.add("A7752 0.5 31.40");
list.add("A7752 0.7 31.40");
// Loop through all the entries
for (String entry : list) {
// Split on space to get the tag
String tag = entry.split(" ")[0];
// Get the list of data starting with this tag
List<String> tagList = tagMap.get(tag);
if (tagList == null) {
// If there are no other entries for tag yet, add a
// new list to the map
tagList = new ArrayList<>();
tagMap.put(tag, tagList);
}
// Add the current entry to the list
tagList.add(entry);
}
// Print out the results
for (Map.Entry<String, List<String>> entry : tagMap.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
}
}
最后,tagMap
将包含从每个标记到以该标记开头的条目列表的映射。要获取给定标记的条目列表(例如A7750
),请执行以下操作:tagMap.get("A7750");
答案 2 :(得分:0)
我发现了一些你可以纠正的事情。
另外,为了简单起见,我添加了一个新列表。
您可以使用:
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
ArrayList<String> list1 = new ArrayList<String>();
ArrayList<String> list2 = new ArrayList<String>();
list.add("A7750 0.0 28.30");
list.add("A7750 0.3 28.30");
list.add("A7741 0.0 31.40");
list.add("A7741 0.1 31.40");
String str[] = list.get(0).split(" ");
list1.add(list.get(0));
for (int i = 1; i < list.size(); i++) {
String str1[] = list.get(i).split(" ");
boolean tag = str[0].equals(str1[0]);
if (tag) {
list1.add(list.get(i));
} else {
list2.add(list.get(i));
}
}
System.out.println(list1);
System.out.println(list2);
}
希望这有帮助!
答案 3 :(得分:0)
您必须使用end
来保存标签及其列表。通过这样做,您可以根据标记轻松找到列表。这应该适合你:
Map