目录
String 、StringBuffffer 和 StringBuilder区别:
一、方法
字符串查找
char charAt(int index) 返回index上字符
int indexOf(int ch) 返回ch第一次出现的位置
转化
String s1=String.valueOf(1234) 数字转字符串
int data=Integer.parseInt("1234") 字符串转数字
s1.toUpperCase() 小写转大写
s1.toLowerCase() 大写转小写
s.toCharArray() 字符串转数组
String s2=new String(ch) 数组转字符串
替换
String replaceAll(String regex,String replacement) 替换所有指定内容
String replaceFirst(String regex,String replacement) 替换某个内容
拆分
String [] split(String regex) 全部拆分
String [] split(String regex,int limit) 以指定的格式拆分为limit 组
二、字符串的不可变性:
String类中的字符实际保存在内部维护的value字符数组中。
问:为什么字符串不可改变?
三、字符串的修改
方法1:
public static void main(String[] args) {
String s = "hello";
s += " world";
System.out.println(s);
// 输出:hello world }
方法2:
public static void main(String[] args) {
String s = "hello";
//其内部执行
StringBuilder sb = new StringBuilder();//创建一个新的对象
sb.append(s);//拼接,将s对象拼接在sb之后
sb.append("world");//将字符串拼接在之后
s=sb.toString();//sb调用toString放法构造一个新的对象
System.out.println(s);
}
String 、StringBuffffer 和 StringBuilder区别:
String中内容不可被修改,StringBuffffer 和 StringBuilder的内容可以修改;
StringBuilder在单线程下使用;StringBuffffer保护线程安全的,多线程情况下使用。
四、题目:
字符串转整数
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为 0 或者字符串不是一个合法的数值则返回 0
注意:
①字符串中可能出现任意符号,出现除 +/- 以外符号时直接输出 0
②字符串中可能出现 +/- 且仅可能出现在字符串首位。
public class Solution {
public int StrToInt(String str) {
char[] ch=str.toCharArray();
int len=ch.length;
int ans=0;
int m=0;
if(len==0){
return 0;
}
for(int i=len-1;i>=0;i--){//0的ASCII值为48
if((ch[i]<48||ch[i]>48+9)&&ch[i]!='+'&&ch[i]!='-'){
return 0;
}
if(ch[i]>48&&ch[i]<48+9){
ans+=(ch[i]-48)*Math.pow(10,m++);//整数的累加输出
}
}
if(ch[0]=='-'){
return -ans;
}
return ans;
}
}
字符串相加
给定两个字符串形式的非负整数 num1
和num2
,计算它们的和并同样以字符串形式返回。
class Solution {
public String addStrings(String num1, String num2) {
int i=num1.length()-1;
int j=num2.length()-1;
int add=0;//进位
StringBuffer suma=new StringBuffer();
while(i>=0||j>=0){
int x=i>=0?num1.charAt(i)-'0':0;//是字符串,返回的也是字符串减去‘0’
int y=j>=0?num2.charAt(j)-'0':0;
int sum=x+y+add;
add=(x+y+add)/10;
suma.append(sum%10);//拼接
i--;
j--;
}
if(add==1){//2+8?
suma.append(1);
}
suma.reverse();//拼接后反转
return suma.toString();
}
}
字符串是否回文
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
class Solution {
private boolean isCharsum(char ch){//判断字符串是否是字母或数字
if(ch>='a'&&ch<='z'||ch>='0'&&ch<='9'){
return true;
}
return false;
}
public boolean isPalindrome(String s) {
s=s.toLowerCase();
if(s==null){
return true;
}
int left=0;
int right=s.length()-1;
while(left<right){
while(left<right&&!isCharsum(s.charAt(left))){//第一个字符串是否为字母或者数字
left++;
}
while(left<right&&!isCharsum(s.charAt(right))){
right--;
}
if(s.charAt(left)!=s.charAt(right)){
return false;
}else{
left++;
right--;
}
}
return true;
}
}