String类

目录

一、方法

字符串查找

转化

替换

拆分

二、字符串的不可变性:

问:为什么字符串不可改变?

三、字符串的修改

方法1:

方法2:

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 是一种不可变对象 . 字符串中的内容是不可改变。字符串不可被修改;

String类中的字符实际保存在内部维护的value字符数组中。 

1. String 类被 final 修饰,表明该类不能被继承
2. value final 修饰,表明 value 自身的值不能改变,即不能引用其它字符数组,但是其引用空间中的内容可以修改。
3.所有涉及到可能修改字符串内容的操作都是创建一个新对象,改变的是新对象

问:为什么字符串不可改变?

final修饰类表明该类不想被继承,final 修饰引用类型表明该引用变量不能引用其他对象,但是其引用对象中的内容是 可以修改的

三、字符串的修改

方法1:

public static void main(String[] args) { 
String s = "hello"; 
s += " world"; 
System.out.println(s); 
// 输出:hello world }
这种方式不推荐使用,因为其效率非常低,中间创建了好多临时对象。

方法2:

b. 借助 StringBuffffer StringBuilder
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;
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值