package string.demos;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Set;
/**
* @author wyl
* @time 2018年7月9日上午10:15:59
* 删除字符串中重复的字符
* 方法:
* ①“蛮力”法
* 把字符串看成一个字符数组,对该数组使用双重遍历,
* 如果发现重复字符,置为 \0;
* 再把 \0字符去掉
* ②HashTable ③set集合
*/
public class Test3 {
public static String removeDup(String s){
char[] cs=s.toCharArray();
for(int i=0;i<cs.length;i++){
if (cs[i]=='\0') {
continue;
}
for(int j=i+1;j<cs.length;j++){
if (cs[j]=='\0') {
continue;
}
//把重复字符置为 \0
if (cs[i]==cs[j]) {
cs[j]='\0';
}
}
}
int m=0;
//去掉 \0
for(int i=0;i<cs.length;i++){
if (cs[i]!='\0') {
cs[m++]=cs[i];
}
}
return new String(cs,0,m);
}
public static String removeDup2(String s){
char[] cs=s.toCharArray();
String res="";
Hashtable<Character, Integer> table=new Hashtable<>();
for(int i=0;i<cs.length;i++){
if (table.containsKey(cs[i])) {
continue;
}else {
table.put(cs[i], 1);
continue;
}
}
for(Iterator<Character> it=table.keySet().iterator();it.hasNext();){
Character key=it.next();
res+=key;
}
return res;
}
public static String removeDup3(String s){
char[] cs=s.toCharArray();
String res="";
Set<Character> set=new HashSet<>();
for(int i=0;i<cs.length;i++){
set.add(cs[i]);
}
//遍历set集合
Iterator<Character> iterator=set.iterator();
while(iterator.hasNext()){
res+=iterator.next();
}
return res;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("方法一");
String str="abcaabcd";
str=removeDup(str);
System.out.println(str);
System.out.println("方法二");
String str2="abcaabcd";
str2=removeDup2(str2);
System.out.println(str2);
System.out.println("方法三");
String str3="abcaabcd";
str3=removeDup3(str3);
System.out.println(str3);
}
}
结果:
方法一
abcd
方法二
badc
方法三
abcd
方法二,得出的结果与方法一不同~~?????
统计一行字符串中有多少个单词?
字符串分割成字符数组;
对每个数组计算长度,若长度≠0,则为单词
package string.demos;
/**
* @author wyl
* @time 2018年7月9日上午10:50:28
*/
public class Test4 {
public static int countWords(String s){
String[] ss=s.split(" ");
int cnt=0;
for(int i=0;i<ss.length;i++){
if (ss[i].length()!=0) {
cnt++;
}
}
return cnt;
}
/**
* 单词的数目可以由空格出现的次数决定(连续的若干个空格作为一次空格;一行开头的空格不统计在内)。
* 若测出某一个字符为非空格,而它前面的字符为空格。则表示新的单词开始了,此时count+1;
* 若当前字符为非空格而其前面的字符也是非空格,则意味着仍是原来那个单词的继续,count不加1
* 前面一个字符是否空格可以从word的值看出来,若word==0,则表示前一个字符是空格;否则,为非空格。
* @param s
* @return
*/
public static int countWords2(String s){
int word=0;
int count=0;
for(int i=0;i<s.length();i++){
if (s.charAt(i)==' ') {
word=0;
}else if (word==0) {
word=1;
count++;
}
}
return count;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
String s="a am ok hh ";
System.out.println(s);
System.out.println("方法一:"+Test4.countWords(s));
System.out.println("方法二:"+Test4.countWords2(s));
}
}