java课堂_动手动脑4

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

 

答:在Java中,内容相同的字串常量(“Hello”)只保存一份以节约内存,所以s0s1s2实际上引用的是同一个对

象。编译器在编译s2一句时,会去掉“+”号,直接把两个字串连接起来得一个字串(“Hello”)。这种优化工作由Java

编译器自动完成。当直接使用new关键字创建字符串对象时,虽然值一致(都是“Hello”),但仍然是两个独立的对象。

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

 

答:给字串变量赋值意味着:两个变量(s1s2)现在引用同一个字符串对象“a”!

String对象的内容是只读的,使用“+”修改s1变量的值,实际上是得到了一个新的字符串对象,

其内容为“ab”,它与原先s1所引用的对象”a”无关,所以,s1==s2返回false;代码中的“ab

”字符串是一个常量,它所引用的字符串与s1所引用的“ab”对象无关。String.equals()方法可以

比较两个字符串的内容。

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

代码:

public class StringEquals {

public static void main(String[] args) {  

String s1=new String("Hello");

String s2=new String("Hello");

System.out.println(s1==s2);

System.out.println(s1.equals(s2));

String s3="Hello";

String s4="Hello";

System.out.println(s3==s4);

System.out.println(s3.equals(s4));

}

}

结果截图

 
   

分析:使用equals()equalsIgnoreCase()方法比较两字串内容是否相同,使用==比较两字串变量是否引用同一

字串对象。而s1s2分别用new所申请了各自的字串对象,所以系统输出false

3、用法:

1Length():获取字串长度

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

3getChars():获取从指定位置起的子串复制到字符数组中(它有四个参数,在示例中有介绍);

4replace():子串替换

5toUpperCase()toLowerCase():大小写转换

6trim():去除头尾空格:

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

解释

定义一个String类型的aa.length()表示字串a的的长度;

for(int i=0;i<a.length();i++)a标号Atchar(i)表示a的第i个字符;

charArray = new char[ 5 ];

a.getChars( 0, 5, charArray, 0 );

//四个参数的含义

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

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

//3.目标字符数组

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

Repalace(a,b)a替换b;

a.toUpperCase()A.toLowerCase()分别是小写转大写,大写转小写;

a.Trim()即去掉字串a的头尾空格;

a.toCharArray()将字串a转化为字符数组。

public class Az

{

public static void main(String[] args)

{

// TODO Auto-generated method stub

String a="   This is my original string ,it is very good!              ";

String b="";

char a1[]=a.toCharArray();

for (int i=a.length()-1; i>=0; i--){

   b += a1[i];

  }

String c=a.toUpperCase();

System.out.println(b+" "+c);

String r = "your";

a = a.replace("my",r);

System.out.println(a.trim());

}

}

4、String str="abc";

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

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

MyCounter counter1=new MyCounter(1);

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

public class MyCounter

{

public static void main(String[] args) {

// TODO Auto-generated method stub

String str="abc";

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

System.out.println(result);

}

}

结果:

课后作业一:字串加密

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

 

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

设计思想:输入要加密的子串str,定义字符串长度,将字符串转化为单个字符,每个字符+3

向后移3个,定义output,将新得到的每个字符加到output后,最终将其输出,此字符串即为加密后的字符串。

程序流程图:

 

源代码:

import java.util.Scanner;

public class Saa

 {

public static void main(String[] args)

{

// TODO Auto-generated method stub

System.out.println("请输入字符");

Scanner in=new Scanner(System.in);

String key=in.nextLine();

int l=key.length();

char a;

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

for(int i=0;i<=key.length()-1;i++)

{

a=key.(i);

if(a<(char) 'x')System.out.println((char)(a+3));

if(a==(char)'x')System.out.println('a');

if(a==(char)'y')System.out.println('b');

            if(a==(char)'z')System.out.println('c');

}

}

}

结果截图:

 

 
   
原文地址:https://www.cnblogs.com/conquer-vv/p/6005980.html