1. 去除重复并排序
1.1 没有分隔符
输入: 字符串
输出: 去除重复字符并排序的字符串
样例输入: aabceeddf
样例输出: abcdef
方法1:
package com.milanuo;
import java.util.Scanner;
/**
* @author 密拉诺
*/
public class Norepart {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("输入任意字符串:");
String input = sc.nextLine();
System.out.println(noRepeat(input));
sc.close();
}
public static String noRepeat(String str) {
char[] chars = new char[133];// 新建一个char数组,大小与char码值对应列表相同
char[] input = str.toCharArray();// 将输入的字符串转换为char数组
int temp;// 暂时存放char数组中的每一个数
for (int i = 0; i < input.length; i++) {
temp = input[i];// 将第i个输入的字符所对应的char数值赋给temp
if (chars[temp] == 0) {// 新建的char数组存的都是默认的初始化值,即都是0
chars[temp] = 1;// 将出现过的字符所对应的数组中的值变为1
}
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < chars.length; i++) {
if (chars[i] == 1) {// 循环新建char数组,将数组中值为1的索引强转为char,并添加到StringBuilder中
sb.append((char) i);
}
}
return sb.toString();// 将StringBuilder转换为String返回
}
}
方法2:
package com.milanuo;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeMap;
/**
* @author 密拉诺
*/
public class Norepart2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("输入任意字符串:");
String input = sc.nextLine();
System.out.println(noRepeat(input));
sc.close();
}
public static String noRepeat(String str) {
char[] input = str.toCharArray();// 将输入的字符串转换为char数组
Map<Character, Integer> map = new TreeMap<>();// 新建一个TreeMap
for (int i = 0; i < input.length; i++) {
map.put(input[i], 1);// 将转换后的char数组中的每一个char值存放在TreeMap中的key中,value可以随便写
// 由于TreeMap中的key不允许重复,相同的值会覆盖
// TreeMap中默认使用了自然排序
}
Set<Character> keySet = map.keySet();// 获取所有的key值
StringBuilder sb = new StringBuilder(32);
for (Character character : keySet) {
sb.append(character);// 将每一个key值循环出来,拼接到StringBuilder中
}
return sb.toString();// 将StringBuilder转换为String返回
}
}
1.2 有分隔符(以”,”为例)
与没有分隔符的区别不大,只是在将输入的String转换成char数组时不同:
String[] strs = input.split(",");
别的做相应变化
package com.milanuo;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeMap;
/**
* @author 密拉诺
*/
public class Norepart3 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("输入任意字符串:");
String input = sc.nextLine();
System.out.println(noRepeat(input));
sc.close();
}
public static String noRepeat(String str) {
String[] input = str.split(",");// 将传过来的字符串按要求的分隔符转化成String[];
Map<String, Integer> map = new TreeMap<>();// 新建一个TreeMap
for (int i = 0; i < input.length; i++) {
map.put(input[i], 1);
}
Set<String> keySet = map.keySet();// 获取所有的key值
StringBuilder sb = new StringBuilder(64);
for (String string : keySet) {
sb.append(string);// 将每一个key值循环出来,拼接到StringBuilder中
}
return sb.toString();// 将StringBuilder转换为String返回
}
}
由于是使用分隔符,所以”a,b,c”和”ab,c”在排序时是不同的,后面的’ab’将作为整体进行排序,这点需要注意。
2. 统计字符串中每个字符出现的次数
输入: 字符串
输出: 每个字符出现的次数
样例输入: aabceedd
样例输出: a=2,b=1,c=1,d=2,e=2
package com.milanuo;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeMap;
/**
* @author 密拉诺
*/
public class Norepart4 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("输入任意字符串:");
String input = sc.nextLine();
System.out.println(noRepeat(input));
sc.close();
}
public static String noRepeat(String str) {
char[] input = str.toCharArray();// 将输入的字符串转换为char数组
Map<Character, Integer> map = new TreeMap<>();// 新建一个TreeMap
for (int i = 0; i < input.length; i++) {
if (map.containsKey(input[i])) {// 判断map中是否有key,有就把value+1
Integer newNum = map.get(input[i]);
map.put(input[i], newNum + 1);
} else {
map.put(input[i], 1);// 没有key,就把value设为1
}
}
Set<Entry<Character, Integer>> entrySet = map.entrySet();// 获取所有的键-值对
StringBuilder sb = new StringBuilder(64);
for (Entry<Character, Integer> entry : entrySet) {
sb.append(entry);// 拼接每一个键-值对
sb.append(",");// 在诶一个键-值对后拼接","
}
sb.deleteCharAt(sb.length() - 1);// 删掉最后一个","号
return sb.toString();// 将StringBuilder转换为String返回
}
}
如果需要保留输入的顺序,只需将上面的TreeMap改为LinkedHashMap就可以了。
原文链接: https://0saber0.github.io/2018/07/06/javaSE-Java%E7%9A%84%E5%AD%97%E7%AC%A6%E4%B8%B2%E9%A2%98%E7%9B%AE/