java-05String课堂练习

1.阅读以下代码查看输出结果

public class StringPool {
    
    public static void main(String args[])
    {
        
        String s0="Hello";
        
        String s1="Hello";
        
        String s2="He"+"llo";
        
        System.out.println(s0==s1);//true
        
        System.out.println(s0==s2);//true
        
        System.out.println(new String("Hello")==new String("Hello"));//false
        
    }
}

分析:在java中,相同的字符串只保存了一份,这是为了节约内存。也就是说s0、s1、s2地址相同,引用了同一对象。而程序最后一行的new新开辟了存储空间,同之前的字符串是不同的对象。所以输出为false。

若改为

public class StringPool {
    
    public static void main(String args[])
    {
        
        
        String s1="a";
        
        String s2=s1;
        
        System.out.println(s1==s2);//true
        
        s1+="b";
        
        System.out.println(s1==s2);//false
        
        System.out.println(s1=="ab");
        
        System.out.println(s1.equals("ab"));
                                                                                             
    }

}

分析:先给字符串变量s1赋值为a字符串,然后将s1的值赋值给s2.此时它们引用的是同一个地址,所以它们是相等的。之后s1的值变成了a字符串和b字符串相连接,即得到了一个新的字符串对象。地址不同所以s1和s2不相等。第三句输出,等式右边的字符串常量“ab”仅是一个字符串常量,同s1所指向的对象无关。而用equals函数则是只比较值,所以相等。

2.请查看String.equals()方法的实现代码,注意学习其实现方法。

anObject instanceof String;
//首先上边的语句,先判断anObject是不是String类的一个实例,如果是运行下边的语句
String anotherString = (String)anObject;
//字符串是一个引用数据类型,本身是String个对象,
//在这里把传进来的anObject这个对象,赋给anotherString (需要类型转换)
//他当然可以调用String类里的成员,你说的count、value、offset都是String的成员
int n = count;//这个count是原始字符串的长度
if (n == anotherString.count) { //把字符串长度和要比较的字符串长度对比,长度都不同的话就不用比字符串内容了
char v1[] = value;//把原始字符串义字符形式存入数组
char v2[] = anotherString.value; //把要比较字符串义字符形式存入数组
int i = offset;//数组下标
int j = anotherString.offset; //????
while (n-- != 0) { //遍历数组,比较 数组元素是否相同
if (v1[i++] != v2[j++])
return false;//在遍历的过程中如果有不同的就返回false;
}
return true;
}
}
return false;
}

3.请阅读JDK中String类上述方法的源码,模仿其编程方式,编写一个MyCounter类,它的方法也支持上述的“级联”调用特性,其调用示例为: MyCounter counter1=new MyCounter(1); MyCounter counter2=counter1.increase(100).decrease(2).increase(3); …

4.字串加密

设计思路:输入一串字母,储存在字符串变量中。将每个字母+3(即加密),用charAt()方法取字符串中的字符,加密后的新字串为str1.输出str1即可。

源代码:

import java.util.Scanner;

public class PassWord {
    public static void main(String[] args) {
        
        Scanner input=new Scanner(System.in);
        System.out.println("请输入要加密的字符串");
        String str;
        int n=0;
        str=input.nextLine();  
        n=str.length();
        char a;
        int n1=0;
        String str1=new String();
        
        for(int i=0;i<n;i++){
   
            a=str.charAt(i);    //取字符
            a=(char)(a+3);
            str1=str1+a;
            
        }
   System.out.println("加密后的子串是:"+str1);
   
  }
}

此程序还有很多不完善的地方,例如没有解密操作,没有进行输入的判断以及后三个字母的密码。

5.整理String类的Length()、charAt()、 getChars()、replace()、 toUpperCase()、 toLowerCase()、trim()、toCharArray()使用方法

Length():获取字串长度,字符串对象中包含length属性,即字符串的长度,使用String类中的length()方法可以获得该属性

CharAt():获取指定位置的字符

getChars:获取从指定位置起的子串复制到字符数组中(它有四个参数,1.被拷贝字符在字串中的起始位置  2.被拷贝的最后一个字符在字串中的下标再加1  3.目标字符数组  4.拷贝的字符放在字符数组中的起始下标),不返回任何值,前面加void

replace():子串替换,通过String类的replace()方法,可以将原字符串中的某个字符替换为指定的字符,并得到一个新的字符串(两个参数,一个是旧字符,一个是新字符)

toUpperCase()、 toLowerCase():大小写转换,在String类中提供了两个用来实现字母大小写转换的方法,它们的返回值均为转换后的字符串,其中toLowerCase()用来将字符串中的所有大写字母改为小写字母,,方法toUpperCase()用来将字符串中的所有小写字母改为大写字母。

trim():去除头尾空格,通过String类的trim()方法,可以通过去掉字符串的首尾空格得到一个新的字符串,该方法的具体定义如下:public String trim()

toCharArray():将字符串对象转换为字符数组

原文地址:https://www.cnblogs.com/lzxw/p/6004915.html