String作业

  • 1.请运行以下示例代码StringPool.java,查看其输出结果。如何解释这样的输出结果?从中你能总结出什么?

答:在Java中内容相同的只保存在一个字节中因此s0,s1,s2是指的相同对象,在判断相等时结果为true,但是当新开辟空间建立新对象时比较的是两个对象,对象不能直接判等,则不相等。

2.

为什么会有上述的输出结果?从中你又能总结出什么?

答:在第一句判断s1=s2时由于赋值语句s2=s1则结果为true;执行s1+=b后s1与s2不再相等,则第二句判断结果为false;第三句中虽然s1中的内容为ab但是字符串ab是一个常量它所引用的字符串ab与s1对象无关,因此判断结果为false;第四句中由于s1内容为ab则利用函数可以判断得到与字符串ab相等,则结果为true。

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

String.equals()实现代码:

public boolean equals(Object anObject)
{
      //如果是同一个对象
       if (this == anObject)
       {
           return true;
       }
       //如果传递进来的参数是String类的实例
       if (anObject instanceof String)
       {
           String anotherString = (String)anObject;
           int n = 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;
                }
               return true;
           }
       }
       return false;
}

程序代码是先判断是否为同一个对象,如果是则结果直接为true,若不是则判断其长度是否相等,然后定义字符数组判断数组中是否两个对象的每一个字符相等。

动手动脑:

  • String类的方法可以连续调用:

String str="abc";

String result=str.trim().toUpperCase().concat("defg");

  • 请阅读JDK中String类上述方法的源码,模仿其编程方式,编写一个MyCounter类,它的方法也支持上述的“级联”调用特性,其调用示例为:

MyCounter counter1=new MyCounter(1);

MyCounter counter2=counter1.increase(100).decrease(2).increase(3);

package test;

 

public class MyCounter {

    int counter=0;

    public MyCounter(int i) {

        counter=i;

    }

    public  MyCounter increase(int add) {

        counter=counter+add;

        return this;

    }

    public MyCounter decrease(int minus) {

        counter=counter-minus;

        return this;

    }

    public static void main(String[] args) {

        MyCounter counter1=new MyCounter(1);

        MyCounter counter2=counter1.increase(100).decrease(2).increase(3);

        System.out.println("计算结果为:"+counter2.counter);

    }

}

动手动脑二:

String.equals()方法、整理String类的Length()、charAt()、 getChars()、replace()、 toUpperCase()、 toLowerCase()、trim()、toCharArray()使用说明、阅读笔记。

String.equals()方法使用时直接在两个对象比较即可,如A.equals(B);

String类方法应用:

Length():这个函数是用来计算字符串长度的;使用时创建对象,然后对象直接调用Length()即可;如:

public int length()

         String s=”asfsdfwfsadf”;

         System.out.println(s.length());

结果:12

 

charAt():这个函数是用来提取字符串中的字符,将字符的位置作为参数利用函数便可以提取中字符;如:

public charAt(int index)//index 是字符下标,返回字符串中指定位置的字符

        String s=”Hello”;

        System.out.println(s.charAt(3));

结果:l

 

getChars():该函数的功能是将字符串中的几个连续字符复制到数组当中;括号内应有4个参数

四个参数的含义

   //1.被拷贝字符在字串中的起始位置

   //2.被拷贝的最后一个字符在字串中的下标再加1

   //3.目标字符数组

   //4.拷贝的字符放在字符数组中的起始下标

  然后用字符串对象直接调用即可。

replace():该函数功能为替换字符串,如

public int replace()

        String s=”\”;

        System.out.println(s.replace(“\”,”///”));

结果///;

toUpperCase():该函数功能为将字符串中的字符全部换为大写;如public String toUpperCase()

         System.out.println(new String(“hello”).toUpperCase());

toLowerCase():该函数功能为将字符串中的字符全部换为小写;如:

public String toLowerCase()//将字符串全部转换成小写

         System.out.println(new String(“HELLO”).toLowerCase());

trim():该函数功能为去除两边的空格;如:

public String trim()

         String x=”ax  c”;

         System.out.println(x.trim());//是去两边空格的方法

 

toCharArraay():该函数功能为将字符串中的一个字符转化成一个字符串数组;如:

String x=”abcd”;

           char myChar[]=x.toCharArray();

          System.out.println(“myChar[1]”+myChar[1]);

结果:b

课后作业1

  • 古罗马皇帝凯撒在打仗时曾经使用过以下方法加密军事情报:

请编写一个程序,使用上述算法加密或解密用户输入的英文字串要求设计思想、程序流程图、源代码、结果截图。

程序设计思想:

编写两个函数解密和加密,根据规则进行字母的转换,并输出。在主函数中输入是要加密还是解密然后分别调用不同的函数。

程序流程图:

 
 

源代码:

package test;

import java.util.*;

public class Code {

   String str;

   static Scanner sc=new Scanner(System.in);

void jiami()

{

   str=sc.next();

   int length=str.length();

   char c[]=str.toCharArray();

   for(int i=0;i<length;i++)

   {

      if(c[i]>='A'&&c[i]<='W'||c[i]>='a'&&c[i]<='w')

         c[i]=(char) (c[i]+3);

      else if(c[i]>='X'&&c[i]<='Z'||c[i]>='x'&&c[i]<='z')

         c[i]=(char)(c[i]-23);

        

   }

   System.out.println("加密后为:");

   for(int i=0;i<length;i++)

      System.out.print(c[i]);

}

void jiemi()

{

   str=sc.next();

   char a[]=str.toCharArray();

   int length=str.length();

   for(int i=0;i<length;i++)

   {

      if(a[i]>='d'&&a[i]<='z'||a[i]>='D'&&a[i]<='Z')

         a[i]=(char)(a[i]-3);

      else if(a[i]>='a'&&a[i]<='c'||a[i]>='A'&&a[i]<='Z')

         a[i]=(char)(a[i]+23);

   }

   System.out.println("解密后为:");

   for(int i=0;i<length;i++)

   {

      System.out.print(a[i]);

   }

}

   public static void main(String[] args) {

      // TODO 自动生成的方法存根

      Code code=new Code();

      System.out.println("请输入您是要加密还是解密:1加密;2解密");

      int n=sc.nextInt();

      if(n==1)

         code.jiami();

      else if(n==2)

         code.jiemi();

 

   }

 

}

 验证结果截图:

 

 

 

 

 

 

 

 

 

 

 

 

原文地址:https://www.cnblogs.com/zzh2019979439/p/7739394.html