A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© vipzh 中级黑马   /  2012-12-6 11:37  /  1490 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

给定一个字符串,里面会有连续重复出现的字符,比如aabbbcdde,要求把连续重复的字符只保留一个,比如上面的字符串处理之后就变成了abcde。

4 个回复

倒序浏览
这个小程序用的是Map<K,V>键值对的形式,不能存重复键的形式来做的
代码如下:

package cn.itcast.day1;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class DropCF {
/**
  * @param args
  */
public static void main(String[] args) {
  // TODO Auto-generated method stub
  Map<Character,Integer> map = new HashMap<Character,Integer>();
  String s = "aabbccddeeff";
  char[] chars = s.toCharArray();
  int x=0;
  for(int i=0;i<chars.length;i++)
  {
   map.put(chars[x],x++ );
   
  }
  Set<Map.Entry<Character,Integer>> entry = map.entrySet();
  for(Map.Entry<Character,Integer> entrys : entry)
  {
   System.out.print(entrys.getKey());
  }
}
}

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
import java.util.Map;
import java.util.TreeMap;
public class MapTest {
/**
* @param args
*/
public static void main(String[] args) {
/*
* 练习:
* "abcdvbzvadsza"获取该字符串中每个字母出现的次数,
* 要求结果是: 字母(次数)字母(次数) 如:a(2)b(3)c(1)e(5)...
*
* 思路:
* 1,发现字母和次数之间存在对应关系。也就是映射关系,这就让我想到了map集合。
* 2,map集合中应该存储是字母和次数,键是字母,值是次数。
* 3,将map作为一张表,使用了查表法思想。对字符串中的每一个字母都去map表中进行次数的查找。
*   如果没有找到对应的次数,就将该字母和1存储到表中。
*   如果找到了对应的次数,就将该次数取出,并对该次数自增后,在将该字母和新的次数重新存入表中,
*   对应map集合而言,键相同,值会覆盖。
* 4,所有的字母都查询完毕后,map表就有了所有字母和次数的对应关系,
* 5,在将这些对应关系变成指定格式的字符串即可。
*/
String str = "abc+advba-zvad,asza";
String s = getCharCount(str);
System.out.println(s);
}
public static String getCharCount(String str) {
//1,先将字符串转成字符数组。
char[] chs = str.toCharArray();
//2,定义一个map容器。作为存储字母和次数的表。
Map<Character,Integer> map = new TreeMap<Character,Integer>();
for (int i = 0; i < chs.length; i++) {
//判断是否是字母。
if(!(chs>='a' && chs<='z' || chs>='A' &&  chs<='Z'))
continue;
//3,将遍历到的每一个字母都作为键去查表。获取次数。
Integer value = map.get(chs);
int count = 0;
if(value!=null){
count = value;
}
count++;
map.put(chs, count);
/*if(value==null)//该字母不存在。将该字母和1次存入。
map.put(chs, 1);
else{
value++;
map.put(chs, value);
}*/
}
// System.out.println(map);
return mapToString(map);
}
private static String mapToString(Map<Character, Integer> map) {
StringBuilder sb = new StringBuilder();
for(Map.Entry<Character, Integer> me : map.entrySet()){
Character key = me.getKey();
Integer value = me.getValue();
sb.append(key+"("+value+")");
}
return sb.toString();
}
}

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
public class StringTrim
{
        public static void main(String[] args)
        {
                String str = "aabbbcdde";
                String regex = "(.)\\1+";
                str = str.replaceAll(regex, "$1");
                System.out.println(str);
        }
}
回复 使用道具 举报
学习了,谢谢。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马