zoukankan      html  css  js  c++  java
  • 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():将字符串对象转换为字符数组

  • 相关阅读:
    Docker安装
    MVC-HtmlHelper简单总结
    D3.js
    分布式事务seata
    彻底搞懂JAVA路径问题
    idea 代码生成
    自动生成 serialVersionUID 的设置
    狂神说SSM框架系列连载
    缓存穿透、缓存击穿、缓存雪崩区别和解决方案
    多线程
  • 原文地址:https://www.cnblogs.com/lzxw/p/6004915.html
Copyright © 2011-2022 走看看