首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

诸位牛人进来看看

2013-09-11 
各位牛人进来看看两个String字符串:num1one,123.0|rt,678.0|two,21.0|shi,123.0 num2one,45.0|shi,78

各位牛人进来看看
两个String字符串:
num1="one,123.0|rt,678.0|two,21.0|shi,123.0"
 
num2="one,45.0|shi,78.0|two,89.0|yu,84.0"
我想得到的是:
num3="one,123.0|shi,123.0|two,21.0|yu,84.0"
num1与num2里面那个‘,’前面的字符相同,就把mun2 逗号 后面的数字改成num1逗号后面的数字。
需求是这样的,他们保存的是一组物品的id和价格,格式:(id,价格|id,价格)
现在num1里面的有些物品id可能和num2里面的物品id相同,当num1里物品价格改变时,相应的num2里物品的价格也要改变、


[解决办法]
";
            }
            Map.Entry<String, WuPin> entry = iter.next();
            result = result + entry.getKey() + "," + entry.getValue().price;
        }
        return result;
    }
    
    public void changeBy(Num num) {
        Iterator<Entry<String, WuPin>> iter = num.wupins.entrySet().iterator(); 
        while (iter.hasNext()) {
            Map.Entry<String, WuPin> entry = iter.next();
            if(this.wupins.containsKey(entry.getKey())){
                this.wupins.get(entry.getKey()).price = entry.getValue().price;
            }
        }
    }
    
    class WuPin {
        String id;
        String price;
        
        WuPin(String id, String price){
            this.id = id;
            this.price = price;
        }
    }
    
    public static void main(String[] args) {
        String str1="one,123.0
[解决办法]
rt,678.0
[解决办法]
two,21.0
[解决办法]
shi,123.0";
        
        String str2="one,123.0
------解决方案--------------------


rt,678.0
[解决办法]
two,800
[解决办法]
shi,123.0";
        
        Num num1 = new Num(str1);
        System.out.println(num1);
        
        num1.changeBy(new Num(str2));
        System.out.println(num1);

    }

}






[解决办法]
用 String strigs = num1.split("
[解决办法]
");  拿到一个数组的(id,price),然后一个loop,找 indexOf(","),分别添加object。
[解决办法]
给楼主一个思路利用正则的搜索替换


public static void main(String[] args){
  String num1 = "one,123.0
[解决办法]
rt,678.0
[解决办法]
two,21.0
[解决办法]
shi,123.0";
  String num2 = "one,45.0
[解决办法]
shi,78.0
[解决办法]
two,89.0
[解决办法]
yu,84.0";
//捕获id以及id后面的价格为组1组2
  Pttern p = Pattern.compile("\\
[解决办法]
?(.*?),(.*?)(?=\\
[解决办法]
$)");
  Matcher m = p.matcher(num1);
  while (m.find()) {
    System.out.println(m.group(1) + "," + m.group(2));
    //利用在num1中捕获到的id和价格替换num2中相同id的价格
    num2=num2.replaceAll("(?<=\\Q" + m.group(1) + "\\E,).*?(?=\\
[解决办法]
$)", m.group(2));
  }
  System.out.println(num2);
}

------解决方案--------------------


楼上各位敢不敢补贴代码。。。给别人一点思考的机会?
j2ee技术交流群 欢迎你的加入282805772
[解决办法]

引用:
2楼, 如果num1和mun2中数据只是部分id相同其他的id不同呢?例如
num1(One,45.0
[解决办法]
two,78.0
[解决办法]
eight,75.0
[解决办法]
three,98.0
[解决办法]
four,56.0)
num2(five,85.0
[解决办法]
six,785.0
[解决办法]
seven,15.0
[解决办法]
eight,685.0
[解决办法]
nine,785.0
[解决办法]
One,145.0)
我想得到的是num2里的数据呀,只是num2中id有和num1中id相同的的物品,就把物品价格替换成mun1中的物品的价格、
所以得到的应该是这种:
num2(five,85.0
[解决办法]
six,785.0
[解决办法]
seven,15.0
[解决办法]
eight,75.0
[解决办法]
nine,785.0
[解决办法]
One,45.0)

楼主貌似没听懂,有个嵌套循环的
for(循环num1数组){
截取字符串得到num1[i]对应的物品id ,暂标识为num1id
for(循环num2数组){
截取字符串得到num2[i]对应的物品id ,暂标识为num2id
if(num1id == num2id)//这里会匹配id相同的部分,不同的不做处理
{
获取缓存中num1id对应的价格
if(两个价格不相等)
{
将num1中num1id对应的价格,赋值给num2和缓存中对应的id的价格
}
}
}}
[解决办法]
引用:
2楼, 如果num1和mun2中数据只是部分id相同其他的id不同呢?例如
num1(One,45.0
[解决办法]
two,78.0
[解决办法]
eight,75.0
[解决办法]
three,98.0
------解决方案--------------------


four,56.0)
num2(five,85.0
[解决办法]
six,785.0
[解决办法]
seven,15.0
[解决办法]
eight,685.0
[解决办法]
nine,785.0
[解决办法]
One,145.0)
我想得到的是num2里的数据呀,只是num2中id有和num1中id相同的的物品,就把物品价格替换成mun1中的物品的价格、
所以得到的应该是这种:
num2(five,85.0
[解决办法]
six,785.0
[解决办法]
seven,15.0
[解决办法]
eight,75.0
[解决办法]
nine,785.0
[解决办法]
One,45.0)



那你就创建 num2 的对象 调用num2.changeBy(num1)就好了。 

你运行一下,然后看看代码吧, 这个程序99%可用了, 

剩下1% 就是需要更严谨些,对数据做些校验,如果不符合格式抛个异常,打个日志什么的。




    public static void main(String[] args) {
        String str1="One,45.0
[解决办法]
two,78.0
[解决办法]
eight,75.0
[解决办法]
three,98.0
[解决办法]
four,56.0";
        
        String str2="five,85.0
[解决办法]
six,785.0
[解决办法]
seven,15.0
[解决办法]
eight,685.0
[解决办法]
nine,785.0
[解决办法]
One,145.0";
        
        Num num1 = new Num(str1);


        Num num2 = new Num(str2);
        
        System.out.println(num1);
        System.out.println(num2);
        
        //num1.changeBy(num2);
        //System.out.println(num1);
        System.out.println("=========================================");
        num2.changeBy(num1);
        System.out.println(num2);

    }



[解决办法]
引用:
Quote: 引用:

2楼, 如果num1和mun2中数据只是部分id相同其他的id不同呢?例如
num1(One,45.0
[解决办法]
two,78.0
[解决办法]
eight,75.0
[解决办法]
three,98.0
[解决办法]
four,56.0)
num2(five,85.0
[解决办法]
six,785.0
[解决办法]
seven,15.0
[解决办法]
eight,685.0
[解决办法]
nine,785.0
[解决办法]
One,145.0)
我想得到的是num2里的数据呀,只是num2中id有和num1中id相同的的物品,就把物品价格替换成mun1中的物品的价格、
所以得到的应该是这种:
num2(five,85.0
[解决办法]
six,785.0
[解决办法]
seven,15.0
[解决办法]
eight,75.0
[解决办法]
nine,785.0
[解决办法]
One,45.0)


那你就创建 num2 的对象 调用num2.changeBy(num1)就好了。 

你运行一下,然后看看代码吧, 这个程序99%可用了, 



剩下1% 就是需要更严谨些,对数据做些校验,如果不符合格式抛个异常,打个日志什么的。




    public static void main(String[] args) {
        String str1="One,45.0
[解决办法]
two,78.0
[解决办法]
eight,75.0
[解决办法]
three,98.0
[解决办法]
four,56.0";
        
        String str2="five,85.0
[解决办法]
six,785.0
[解决办法]
seven,15.0
[解决办法]
eight,685.0
[解决办法]
nine,785.0
[解决办法]
One,145.0";
        
        Num num1 = new Num(str1);
        Num num2 = new Num(str2);
        
        System.out.println(num1);
        System.out.println(num2);
        
        //num1.changeBy(num2);
        //System.out.println(num1);
        System.out.println("=========================================");
        num2.changeBy(num1);
        System.out.println(num2);

    }




运行结果

two,78.0
[解决办法]
three,98.0
[解决办法]
four,56.0
[解决办法]
One,45.0
[解决办法]
eight,75.0
seven,15.0
------解决方案--------------------


five,85.0
[解决办法]
nine,785.0
[解决办法]
One,145.0
[解决办法]
eight,685.0
[解决办法]
six,785.0
=========================================
seven,15.0
[解决办法]
five,85.0
[解决办法]
nine,785.0
[解决办法]
One,45.0
[解决办法]
eight,75.0
[解决办法]
six,785.0

热点排行