java字符串基础操作

1.字符串的特点

•java.lang.String使用了final修饰,不能被继承;

  • 字符串底层封装了字符数组及针对字符数组的操作算法;
  • 字符串一旦创建,对象内容永远无法改变,但字符串引用 可以重新赋值;

•Java字符串在内存中采用Unicode编码方式,任何一个字 符对应两个字节的定长编码。

2.常用方法

ndexOf方法
int indexOf(String str)
检索当前字符串中给定字符串的位置.如果当前字符串不 包含给定内容时返回值为-1.
package string;


/**
*int indexOf(String str)
*检索当前字符串中给定字符串的位置.如果当前字符串不包含给定内容时返回值为-1.
*/
public class IndexOfDemo {
public static void main(String[] args)
{
//	0123456789012345
String str = "thinking in java";
//查找in在当前字符串中第一次出现的位置int index = str.indexOf("in"); System.out.println(index);//2
//从指定位置开始检索第一次出现给定字符串的
位置
index = str.indexOf("in",3); System.out.println(index);//5
//检索最后一次出现给定字符串的位置
index = str.lastIndexOf("in");

3. 去除当前字符串两边的空白字符

package string11;

/**
 * String trim()
 * 去除当前字符串两边的空白字符
 */
public class TrimDemo {
    public static void main(String[] args) {
        String str = "   hello          ";
        System.out.println(str);
        String trim = str.trim();//trim方法返回后的字符串不含有两边的空白字符
        System.out.println(trim);

    }
}



4.将当前字符串中的英文部分转换为全大写或全小写

package string11;

/**
 * String toUpperCase()
 * String toLowerCase()
 * 将当前字符串中的英文部分转换为全大写或全小写
 */
public class ToUpperCaseDemo {
    public static void main(String[] args) {
        String str = "我爱Java";
        System.out.println(str);

        String upper = str.toUpperCase();
        System.out.println(upper);

        String lower = str.toLowerCase();
        System.out.println(lower);

    }
}


5.判断当前字符串是否是以给定内容开始或结尾的
package string11;

/**
 * boolean startsWith(String str)
 * boolean endsWith(String str)
 * 判断当前字符串是否是以给定内容开始或结尾的
 */
public class StartsWithDemo {
    public static void main(String[] args) {
        String str = "www.tedu.com";
        //查看str是否是以"www."开始的
        boolean starts = str.startsWith("www.");
        System.out.println(starts);

        boolean ends = str.endsWith(".cn");
        System.out.println(ends);//false
        ends = str.endsWith(".com");
        System.out.println(ends);//true
    }
}



6.String提供了一组重载的valueOf方法,作用是将其他类型转换为String.

package string11;

/**
 * String提供了一组重载的valueOf方法,作用是将其他类型转换为String.
 * 注:这些valueOf都是静态方法
 */
public class valueOfDemo {
    public static void main(String[] args) {
        int a = 123;
        String str = String.valueOf(a);

        double dou = 123.123;
        String str2 = String.valueOf(dou);

        System.out.println(str);
        System.out.println(str2);

        String str3 = a + "";
        System.out.println(str3);
    }
}



7.返回当前字符串中指定下标处对应的字符
package string11;

/**
 * char charAt(int index)
 * 返回当前字符串中指定下标处对应的字符
 */
public class CharAtDemo {
    public static void main(String[] args) {
        //            0123456789012345
        String str = "thinking in java";
        //获取第5个字符是什么?
        char c = str.charAt(4);
        System.out.println(c);

        //             0 1 2 3  5 6 7 8
        String line = "上海自来水来自海上";//回文
        for(int i=0;i<4;i++){
            //获取正数位置上的字符
            char c1 = line.charAt(i);
            //获取倒数位置上的字符
            char c2 = line.charAt(line.length()-1-i);
            if(c1 != c2){
                System.out.print("不");
                break;
            }
        }
        System.out.println("是回文!");



    }
}



8.常量池

java对字符串有一个优化措施:字符串常量池.

       java推荐我们使用字面量形式创建字符串,并且会缓存所有使用字符串字面量形式创建的字符串对象,当使用相同 字面量再次创建字符串时会重用对象来减少内存开销,免内存中堆积大量内容相同的字符串对象.

package string;


public class StringDemo {
public static void main(String[] args){
    String s1 = "123abc"; System.out.println("s1:"+s1);
    //由于s1使用该字面量创建过字符串对象,因此
    s2会重用这个对象
    String s2 = "123abc"; System.out.println("s2:"+s2); 
    System.out.println(s1 ==s2);//true,地址相同

    String s3 = "123abc"; System.out.println(s1 == s3);
    //true s2 = s2 + "!";//修改字符串内容会创建新对 象 ! 
    System.out.println("s2:"+s2);//123abc!
    System.out.println("s1:"+s1);//123abc 
    System.out.println(s1 == s2);//false

    String s4 = new String("123abc");//new会创建新对象
    System.out.println("s4:"+s4);
     System.out.println(s1 ==s4);//false,地址不相同

    //实际开发中比较字符串的需求都是比较内容,都应当使用equals进行比较!!!


    System.out.println(s1.equals(s4));//true,字符串内容相同
    /*
    这里触发了编译器的一个特点:
    编译器在编译源代码时,只要一个计算表达式可以在编译期间确定结果的,编译器一定
    进行计算,并将结果编译到字节码文件中.因此下面的代码会被编译器改为:
    String s5 = "123abc";
    因此s5在JVM进行执行时会重用s1对象.
    */
    String s5 = "123" + "abc"; 
    System.out.println("s5:"+s5); 
    System.out.println(s1 == s5);//true


    String s = "123";
    String s6 = s + "abc";//修改内容创建新对象
    System.out.println("s6:"+s6);
    System.out.println(s1 == s6);//false

}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值