- 直接遍历
for(int i = 0; i< s.length(); i ){//遍历字符串
char c = s.charAt(i);//遍历单个字符,char 类型的 索引查询 s.charAt(i);
}
char 这种格式的比较有意思,它可以比较大小,做加减。
- 把字符串转换为字符数组进行遍历
char[] charArray = s.toCharArray();
for(char c : charArray){
// do some
}
用HashSet 去重,计数
import java.util.*;
public class Main{
//用set 去去重。
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String s = sc.next();
Set<Character> set = new HashSet<>();
for(int i = 0; i< s.length(); i ){//遍历字符串
char c = s.charAt(i);
set.add(c);
}
System.out.println(set.size());//set 自动去重,返回集合大小
}
}
StringBuilder sb = new StringBuilder(s); // 初始值为字符串s
遍历也是同样的方法:索引查询 sb.charAt(i);
StringBuilder不是集合或数组。它只是一个提供一些额外功能来使用字符串的类。它没有实现IEnumerable接口。
import java.util.*;
public class Main{
//用set 去去重。
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String s = sc.next();
StringBuilder sb = new StringBuilder(s);
Set<Character> set = new HashSet<>();
for(int i = 0; i< sb.length(); i ){
char c = sb.charAt(i);
set.add(c);
}
System.out.println(set.size());
}
}
package testStr;
import java.util.*;
public class MainHJ2 {
//用hashmap 去count。
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s1 = sc.nextLine();//这里一定不能是next()
String s2 = sc.next();//第二行输入
char c1 = s2.charAt(0);
StringBuilder sb = new StringBuilder(s1);//存放字符
Map<Character, Integer> map = new HashMap<>();
for (int i = 0; i < sb.length(); i ) {
char c = sb.charAt(i);
if (map.containsKey(c)) {
map.put(c, map.get(c) 1);//存在key ,把value 1
}else{
map.put(c, 1);//第一次加入,value 为1
}
}
System.out.println(Arrays.toString(map.entrySet().toArray()));
int res = 0;//结果个数
if (map.containsKey(c1)) {
res = map.get(c1);
}
System.out.println(res);
}
}
ide 测试结果:这是区分大小写的,不和题意;
加一个大小写转行命令就ok了
import java.util.*;
public class Main {
//用hashmap 去count。区分大小写的解法
public static void main(String[] args) {
//处理输入
Scanner sc = new Scanner(System.in);
String s1 = sc.nextLine();
String lowS1 = s1.toLowerCase();//都小写吧
String s2 = sc.next();
String lowS2= s2.toLowerCase();
char c1 = lowS2.charAt(0);
Map<Character, Integer> map = new HashMap<>();
for (int i = 0; i < lowS1.length(); i ) {
char c = lowS1.charAt(i);
if (map.containsKey(c)) {
map.put(c, map.get(c) 1);//存在key ,把value 1
}else{
map.put(c, 1);//第一次加入,value 为1
}
}
// System.out.println(Arrays.toString(map.entrySet().toArray()));打印map ,方便ide试
int res = 0;//结果个数
if (map.containsKey(c1)) {
res = map.get(c1);
}
System.out.println(res);
}
}
ps:
字符串的常用api 要熟悉,才能对字符串的题目有的放矢
加油:P
我的笔记:
一、int转String
String.valueOf(int)
二、char转String
String.valueOf(char)
三、String转int
Integer.parseInt(str)
四、String转换为char
1. String.charAt(i)(返回值为char)
2. String.toCharArray()
五、字符串的修改
使用 StringBuffer 和 StringBuilder 类。
StringBuilder sb = new StringBuilder(10); 这是设置容量10,可以自动扩容。
sb.method();
自带的反转字符串方法。 sb.reverse();
Strings= sb.toString();
字符串大小写:
s.toLowerCase()
toLowerCase()方法将String转换为小写。如果字符串中没有应该被转换的字符,则将原字符串返回,否则返回一个新的字符串。
next() 方法遇见第一个有效字符(不是空格和换行符)时,开始扫描,当遇见第一个分隔符或结束符(空格或换行符)时,结束扫描,获取扫描到的内容,也就是说使用next()方法获得的是不含空格和换行符的单个字符串。
nextLine(),则可以扫描到一行内容并作为一个字符串
,