1.面试题:String、StringBuilder、StringBuffer的区别?
解答:
- String的内容不可修改,StringBuffer与StringBuilder的内容可以修改。
- StringBuffer与StringBuilder大部分功能是相似的。
- StringBuffer采用同步处理,属于线程安全操作;而StringBuilder未采用同步处理,属于线程不安全操作。
2.第一个只出现一次的字符
问题描述:给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。
public static int firstChar(String s){
int[] count=new int[256];
//统计每个字符出现的次数
for(int i=0;i<s.length();++i){
count[s.charAt(i)]++;
}
//找第一个只出现一次的字符
for(int i=0;i<s.length();++i){
if(1==count[s.charAt(i)]){
return i;
}
}
return -1;
}
public static void main(String[] args) {
//给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。
String s1=new String("aaebbccd");
System.out.println(firstChar(s1));
}
}
3.最后一个单词的长度
public static void main(String[] args) {
//循环输入
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
//获取一行单词
String s=sc.nextLine();
//1.找到最后一个空格
//2.获取最后一个单词:从最后一个空格+1位置开始,一直截取到末尾
//3.打印最后一个单词长度
int len =s.substring(s.lastIndexOf(' ')+1,s.length()).length();
System.out.println(len);
}
sc.close();
}
//hello world happy nice
4
4.检测字符串是否为回文
public static boolean isValidChar(char ch){
if((ch >= 'a' && ch <= 'z') ||
(ch >= '0' && ch <= '9')){
return true;
}
return false;
}
public static boolean isPalindrome(String s) {
// 将大小写统一起来
s = s.toLowerCase();
int left = 0, right = s.length()-1;
while(left < right){
// 1. 从左侧找到一个有效的字符
while(left < right && !isValidChar(s.charAt(left))){
left++;
}
// 2. 从右侧找一个有效的字符
while(left < right && !isValidChar(s.charAt(right))){
right--;
}
if(s.charAt(left) != s.charAt(right)){
return false;
}else{
left++;
right--;
}
}
return true;
}
public static void main(String[] args) {
String s1=new String("abcba");
System.out.println(isPalindrome(s1));
}
//true