我有两个字符串
String bookCar = "1_2-2_3-3_4-4_5";
String newBookCar = "3_2-5_6";-代表拼接(需要用split差分)
 id _ number 下划线的左边代表书id右边代表数的数量
如何实现如果第二个字符串内的id有跟第一个数的id相同的话
数量相加,如果不是相同就拼接 . 生成一个新字符串
即 
1_2-2_3-5_4-4_5-5_6麻烦大神帮小弟看看,麻烦了String

解决方案 »

  1.   

    不是的,如果第二个字符串内的id与第一个字符串内的id相同
    就把两个数量相加
    第一个字符串3_2
    第二个字符串3_3
    然后数量相加
    ,两个字符串都匹配不到的
    将其拼接
    1_2-2_3-5_4-4_5-5_6
      

  2.   

    这个是用cookie实现购物车的测试
    cookie的value只能存储字符串
    第一个字符串代表原cookie内的数据
    第二个代表新cookie的数据
    如果相同,数量累加,如果不同拼接
      

  3.   

    应该是1_2-2_3-3_6-4_5-5_6吧 System.out.println("===================");
    String bookCar = "1_2-2_3-3_4-4_5";
    String newBookCar = "3_2-5_6";
    String newCar = "";
    String[] bookCarArr = bookCar.split("-");
    String[] newBookCarArr = newBookCar.split("-");
    Map<Integer, Integer> map = new TreeMap<Integer, Integer>();
    for (String key : bookCarArr) {
    String[] a = key.split("_");
    map.put(Integer.valueOf(a[0]), Integer.valueOf(a[1]));
    }
    for (String key : newBookCarArr) {
    String[] a = key.split("_");
    Integer k = Integer.valueOf(a[0]);
    Integer v = Integer.valueOf(a[1]);
    if (map.containsKey(k)) {
    map.put(k, map.get(k) + v);
    } else {
    map.put(k, v);
    }
    }
    for (Integer key : map.keySet()) {
    newCar += (key + "_" + map.get(key) + "-");
    }
    newCar = newCar.substring(0, newCar.length() - 1);
    System.out.println(newCar);
    System.out.println("===================");
      

  4.   


    package test;public class Insert2 {
          
    public static void main(String[] args) {
            System.out.println("===================");
        // 1_1-2_6-3_3-5_5
    String cartValue = "1_1-2_2-3_3";
    String buyBook = "2_4-5_5";
    String[] bookInfoArray = cartValue.split("\\-");
    String[] buyBookInfoArray = buyBook.split("\\-");
    String newCartValue = ""; for (int i = 0; i < bookInfoArray.length; i++) {
    boolean isFindBookId = false; String bookId = bookInfoArray[i].split("\\_")[0];
    String bookNum = bookInfoArray[i].split("\\_")[1]; String buyBookId = "";
    String buyBookNum = "";
    for (int j = 0; j < buyBookInfoArray.length; j++) {
    buyBookId = buyBookInfoArray[j].split("\\_")[0];
    buyBookNum = buyBookInfoArray[j].split("\\_")[1];
    if (bookId.equals(buyBookId)) {
    isFindBookId = true;
    break;
    }
    } if (isFindBookId == true) {
    newCartValue = newCartValue
    + "-"
    + bookId
    + "_"
    + (Integer.parseInt(bookNum) + Integer
    .parseInt(buyBookNum));
    } else {
    newCartValue = newCartValue + "-" + bookId + "_" + bookNum;
    } } if (newCartValue.charAt(0) == '-') {
    newCartValue = newCartValue.substring(1);
    } bookInfoArray = newCartValue.split("\\-"); for (int i = 0; i < buyBookInfoArray.length; i++) {
    boolean isFindBookId = false;
    String buyBookId = buyBookInfoArray[i].split("\\_")[0];
    String buyBookNum = buyBookInfoArray[i].split("\\_")[1]; for (int j = 0; j < bookInfoArray.length; j++) {
    String bookId = bookInfoArray[j].split("\\_")[0];
    String bookNum = bookInfoArray[j].split("\\_")[1]; if (bookId.equals(buyBookId)) {
    isFindBookId = true;
    break;
    }
    } if (isFindBookId == false) {
    newCartValue = newCartValue + "-" + buyBookId + "_"
    + buyBookNum;
    }
    } if (newCartValue.charAt(0) == '-') {
    newCartValue = newCartValue.substring(1);
    }
                    System.out.println("===================");
    System.out.println(newCartValue); } 
    }
      

  5.   

    String bookCar = "1_2-2_3-3_4-4_5";
    String newBookCar = "3_2-5_6";1_2-2_3-3_6-4_5-5_6大神 您的 
    3-3应该变成 3 -5
    两个字符串有相同的id需要相加,
    其他的都对,您加到id为4的上面去了
      

  6.   

    不好意思,可能是我表达的不是太好,抱歉
    先是两个字符串
    String bookCar = "1_2-2_3-3_4-4_5";
    String newBookCar = "3_2-5_6";
    1_2
    1是id,2是数量
    两个字符串差分
    遍历判断
    如果第一个数据内的id与第二个数据的id相同
    两个的数量就相加
    3_3与3_2
    的id相同他们的数量相加
    其他的没有匹配上的拼接成一个新的string语句
    结果是
    1_2-2_3-5(id相同数量相加)_4-4_5-5_6
      

  7.   

    import java.util.Map.Entry;
    import java.util.TreeMap;public class BookCar { public static String merge(String bookCar,String anotherCar){
    TreeMap<String, Integer> mapping = new TreeMap<String, Integer>();
    for(String book : bookCar.split("\\-")){
    String info[] = book.split("\\_");
    mapping.put(info[0], Integer.parseInt(info[1]));
    }
    for(String book : anotherCar.split("\\-")){
    String info[] = book.split("\\_");
    if(mapping.get(info[0])==null){
    mapping.put(info[0], Integer.parseInt(info[1]));
    }else{
    int count = mapping.get(info[0]);
    mapping.put(info[0], count+Integer.parseInt(info[1]));
    }
    }
    StringBuilder buff = new StringBuilder();
    for(Entry<String, Integer> book : mapping.entrySet()){
    buff.append(book.getKey()).append('_').append(book.getValue()).append('-');
    }
    if(buff.charAt(buff.length()-1)=='-'){
    buff.deleteCharAt(buff.length()-1);
    }
    return buff.toString();
    }

    /**
     * 测试用例
     */
    public static void main(String[] args) {
    String bookCar = "1_2-2_3-3_4-4_5";
    String newBookCar = "3_2-5_6";
    String merge = merge(bookCar, newBookCar);
    System.out.println(merge);
    }}
      

  8.   

    package test1;public class test1 { /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    String bookCar = "1_2-2_3-3_4-4_5";
    String newBookCar = "3_2-5_6";

    String bctemp=""; 
    String nbctemp=""; 

    String bc[]=bookCar.split("-");  
    String nbc[]=newBookCar.split("-"); for(int i=0;i<bc.length;i++){
    nbctemp="";
    for(int j=0;j<nbc.length;j++){
    if(!nbc[j].equals("")&&bc[i].substring(0, 1).equals(nbc[j].substring(0, 1))){

    bc[i]=bc[i].substring(0, 2)+(Integer.parseInt(nbc[j].substring(2, 3))+Integer.parseInt(bc[i].substring(2, 3)));
    nbc[j]=""; 
    }
    if(i==bc.length-1){
    if(!nbc[j].equals("")){
    nbctemp+=nbc[j];
    if(j<nbc.length-1){ 
    nbctemp+="-";
    }
    }
    }
    }
    if(nbctemp.length()<=0&&i==bc.length-1){
    bctemp+=bc[i];
    }else{
    bctemp+=bc[i]+"-";
    }
    }

    System.out.println((bctemp+nbctemp));
    }}