我有一个比如叫做input.txt 文本 格式如下
12   Follower[13,14,16,]
12   Following[14,29,39,]
13   Following[12,]
14   Follower[12,48,98,]
14   Following [12,48,90,]这个文本是按照第一列的数字(之后成为用户) 升序排列的
我想找的是 比如用户12 他既有follower 也有following 我想找方括号里面相同的元素 并输出存为output.txt 例如:12  [14]
14  [12,48]应该怎么做??
请给我具体的code 谢谢 80分哟~~~

解决方案 »

  1.   

    既然你没特别要求,以user为key放到map里面就得,再拿size为2的所有map就可以了
      

  2.   

    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.util.ArrayList;public class FindSameNumber
    {
    void StringInArray(ArrayList<Integer> list, String str)
    {
    int start = 1;
    int end = 0;
    int i; while (!str.substring(start).equals("]"))
    {
    for (i = start; i < str.length(); i++)
    {
    if (str.charAt(i) == ',')
    {
    end = i;
    break;
    }
    } int number = Integer.parseInt(str.substring(start, end));
    list.add(number); start = end + 1;
    }
    } void find() throws Exception
    {
    BufferedReader br = new BufferedReader(new FileReader(new File(
    "input.txt")));
    BufferedWriter bw = new BufferedWriter(new FileWriter(new File(
    "output.txt"))); String t1 = br.readLine();
    String t2; ArrayList<Integer> list1 = new ArrayList<Integer>();
    ArrayList<Integer> list2 = new ArrayList<Integer>(); while (t1 != null)
    {
    t2 = br.readLine(); int user1Index = t1.indexOf(" F");
    int user2Index = t2.indexOf(" F"); int number1 = Integer.parseInt(t1.substring(0, user1Index));
    int number2 = Integer.parseInt(t2.substring(0, user2Index)); if (number1 == number2)
    {
    bw.write(number1 + " [");

    int user1ArrayIndex = t1.indexOf("[");
    int user2ArrayIndex = t2.indexOf("["); StringInArray(list1, t1.substring(user1ArrayIndex));
    StringInArray(list2, t2.substring(user2ArrayIndex));

    int i = 0;
    int j = 0;

    while(i != list1.size() -1 && j != list2.size())
    {
    int ele1 = list1.get(i);
    int ele2 = list2.get(j);

    if(ele1 == ele2)
    {
    bw.write(ele1+",");
    System.out.println(number1+":"+ele1);

    i++;
    j++;
    }else
    {
    if(ele1 > ele2)
    {
    j++;
    }else
    {
    i++;
    }
    }

    }

    bw.write("]\r\n"); t1 = br.readLine();
    } else
    {
    t1 = t2;
    } }

    br.close();
    bw.close();
    } public static void main(String[] args) throws Exception
    {
    FindSameNumber fsm = new FindSameNumber();
    fsm.find();
    }
    }条件:
    1.如果相同用户后不是Following就是Follower
    2.用户的数组已经排好序
      

  3.   

    条件:
    1.如果相同用户后不是Following就是Follower
    2.用户的数组已经排好序
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.util.ArrayList;public class FindSameNumber
    {
    void StringInArray(ArrayList<Integer> list, String str)
    {
    int start = 1;
    int end = 0;
    int i; while (!str.substring(start).equals("]"))
    {
    for (i = start; i < str.length(); i++)
    {
    if (str.charAt(i) == ',')
    {
    end = i;
    break;
    }
    } int number = Integer.parseInt(str.substring(start, end));
    list.add(number); start = end + 1;
    }
    } void find() throws Exception
    {
    BufferedReader br = new BufferedReader(new FileReader(new File(
    "input.txt")));
    BufferedWriter bw = new BufferedWriter(new FileWriter(new File(
    "output.txt"))); String t1 = br.readLine();
    String t2; ArrayList<Integer> list1 = new ArrayList<Integer>();
    ArrayList<Integer> list2 = new ArrayList<Integer>(); while (t1 != null)
    {
    t2 = br.readLine(); int user1Index = t1.indexOf(" F");
    int user2Index = t2.indexOf(" F"); int number1 = Integer.parseInt(t1.substring(0, user1Index));
    int number2 = Integer.parseInt(t2.substring(0, user2Index)); if (number1 == number2)
    {
    bw.write(number1 + " [");

    int user1ArrayIndex = t1.indexOf("[");
    int user2ArrayIndex = t2.indexOf("["); StringInArray(list1, t1.substring(user1ArrayIndex));
    StringInArray(list2, t2.substring(user2ArrayIndex));

    int i = 0;
    int j = 0;

    while(i != list1.size() -1 && j != list2.size())
    {
    int ele1 = list1.get(i);
    int ele2 = list2.get(j);

    if(ele1 == ele2)
    {
    bw.write(ele1+",");
    System.out.println(number1+":"+ele1);

    i++;
    j++;
    }else
    {
    if(ele1 > ele2)
    {
    j++;
    }else
    {
    i++;
    }
    }

    }

    bw.write("]\r\n"); t1 = br.readLine();
    } else
    {
    t1 = t2;
    } }

    br.close();
    bw.close();
    } public static void main(String[] args) throws Exception
    {
    FindSameNumber fsm = new FindSameNumber();
    fsm.find();
    }
    }
      

  4.   

    上面代码ArrayList忘清空了。。这个应该没问题import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.util.ArrayList;public class FindSameNumber
    {
    void StringInArray(ArrayList<Integer> list, String str)
    {
    int start = 1;
    int end = 0;
    int i; while (!str.substring(start).equals("]"))
    {
    for (i = start; i < str.length(); i++)
    {
    if (str.charAt(i) == ',')
    {
    end = i;
    break;
    }
    } int number = Integer.parseInt(str.substring(start, end));
    list.add(number); start = end + 1;
    }
    } void find() throws Exception
    {
    BufferedReader br = new BufferedReader(new FileReader(new File(
    "input.txt")));
    BufferedWriter bw = new BufferedWriter(new FileWriter(new File(
    "output.txt"))); String t1 = br.readLine();
    String t2; ArrayList<Integer> list1 = new ArrayList<Integer>();
    ArrayList<Integer> list2 = new ArrayList<Integer>(); while (t1 != null)
    {
    t2 = br.readLine(); int user1Index = t1.indexOf(" F");
    int user2Index = t2.indexOf(" F"); int number1 = Integer.parseInt(t1.substring(0, user1Index));
    int number2 = Integer.parseInt(t2.substring(0, user2Index)); if (number1 == number2)
    {
    bw.write(number1 + " [");

    int user1ArrayIndex = t1.indexOf("[");
    int user2ArrayIndex = t2.indexOf("["); StringInArray(list1, t1.substring(user1ArrayIndex));
    StringInArray(list2, t2.substring(user2ArrayIndex));

    int i = 0;
    int j = 0;

    while(i != list1.size() -1 && j != list2.size())
    {
    int ele1 = list1.get(i);
    int ele2 = list2.get(j);

    if(ele1 == ele2)
    {
    bw.write(ele1+",");

    i++;
    j++;
    }else
    {
    if(ele1 > ele2)
    {
    j++;
    }else
    {
    i++;
    }
    }

    }

    bw.write("]\r\n"); t1 = br.readLine();
    } else
    {
    t1 = t2;
    }

    list1.clear();
    list2.clear(); }

    br.close();
    bw.close();
    } public static void main(String[] args) throws Exception
    {
    FindSameNumber fsm = new FindSameNumber();
    fsm.find();
    }
    }
      

  5.   


    Exception in thread "main" java.lang.NoClassDefFoundError: FindSameNumber
    Caused by: java.lang.ClassNotFoundException: FindSameNumber
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
    Could not find the main class: FindSameNumber. Program will exit.
      

  6.   

    你说的两个条件应该都符合
    但是有的用户可能只有follower 有的只有following 这个也可以解决吗
      

  7.   

    可以用集合的交集来处理
    for exampleimport java.io.*;
    import java.util.*;
    import java.util.regex.*;
    public class Test {
        public static void main(String[] args) throws Throwable {
            Map<String, Map<String,List<String>>> map = new LinkedHashMap<String, Map<String, List<String>>>();
            Scanner sc = new Scanner(new FileInputStream("input.txt"));
            String regex = "(\\d+)\\s+(\\w+)\\s*\\[\\s*((\\d+[,]?\\s*)+)\\s*\\]";
            Pattern p = Pattern.compile(regex);
            //读文件
            while (sc.hasNextLine()) {
                String s = sc.nextLine();
                if (!s.matches(regex)) continue;
                Matcher m = p.matcher(s);
                m.find();
                String key1 = m.group(1);
                String key2 = m.group(2);
                String value = m.group(3);
                if (!map.containsKey(key1)) {
                    map.put(key1, new HashMap<String, List<String>>());
                }
                Map<String, List<String>> sub = map.get(key1);
                if (!sub.containsKey(key2)) {
                    sub.put(key2, new ArrayList<String>());
                }
                sub.get(key2).addAll(Arrays.asList(value.split(",")));
            }
            sc.close();        //写文件
            PrintStream ps = new PrintStream("output.txt");
            for (Map.Entry<String, Map<String, List<String>>> e1 : map.entrySet()) {
                Map<String, List<String>> sub = e1.getValue();
                if (sub.size() > 1) { //存在Follower和Following的情况才做处理
                    List<String> list = null;
                    for (Map.Entry<String, List<String>> e2 : sub.entrySet()) {
                        if (list == null) list = e2.getValue();
                        else list.retainAll(e2.getValue());
                    }
                    ps.printf("%s [", e1.getKey());
                    for (String n : list) {
                        ps.printf("%s,", n);
                    }
                    ps.println("]");
                }
            }
            ps.close();
        }
    }
      

  8.   


    Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
    at java.lang.String.substring(Unknown Source)
    at FindSameNumber.find(FindSameNumber.java:54)
    at FindSameNumber.main(FindSameNumber.java:114)您看看这是为什么嘛
      

  9.   


    报错了Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
    at java.lang.String.substring(Unknown Source)
    at FindSameNumber.find(FindSameNumber.java:54)
    at FindSameNumber.main(FindSameNumber.java:114)
      

  10.   

    看看这个
    http://topic.csdn.net/u/20120624/21/9357067a-552c-4200-a16c-f0924f4b2da6.html