字符串相关问题
1.请运行以下示例代码StringPool.java,查看其输出结果。如何解释这样的输出结果?从中你能总结出什么?
(1)输出结果
(2)解释
String不是基本数据类型,而是一个类,所以在比较他们的对象时比较的是地址。
而且若是两个对象的内容相同,他们的地址也会相同。所以s0与s1和s2相等。而最后两个是因为他们两个位于不同的储存空间中,所以不相等。
2.
为什么会有上述的输出结果?从中你又能总结出什么?
给字串变量赋值意味着:两个变量(s1,s2)现在引用同一个字符串对象“a”!
String对象的内容是只读的,使用“+”修改s1变量的值,实际上是得到了一个新的字符串对象,其内容为“ab”,它与原先s1所引用的对象”a”无关,所以,s1==s2返回false;
代码中的“ab”字符串是一个常量,它所引用的字符串与s1所引用的“ab”对象无关。
3.请查看String.equals()方法的实现代码,注意学习其实现方法。
如图所示为String.equals的实现代码,此代码先通过比较地址,再通过比较内容来实现字符串内容的比较。
4.古罗马皇帝凯撒在打仗时曾经使用过以下方法加密军事情报:
请编写一个程序,使用上述算法加密或解密用户输入的英文字串要求设计思想、程序流程图、源代码、结果截图。
(1)设计思想
通过对输入的字符串进行每个字符的提取,然后分别对每个字符进行加密。
(2)程序流程图
(3)源代码
//信1605-3 20163677 多文佳
class jiami2 { String s; public jiami2(String s) { this.s=s; //通过构造函数来初始化需要加密或解密的字符串 } public void jiami1() { char m; for(int i=0;i<s.length();i++) { m=s.charAt(i); m=(char)(m+3); if(m==91) { m='A'; } else if(m==92) { m='B'; } else if(m==93) { m='C'; } System.out.print(m); } System.out.println(); } //通过循环依次对每个字符加密并输出 public void jiemi() { char m; for(int i=0;i<s.length();i++) { m=s.charAt(i); m=(char)(m-3); if(m==64) { m='Z'; } else if(m==63) { m='Y'; } else if(m==62) { m='X'; } System.out.print(m); } System.out.println(); //通过循环依次对每个字符解密并输出 } public static void main() { } } public class jiami{ public static void main(String args[]) { jiami2 a=new jiami2("AJIDHRUIHUS"); System.out.print("加密后为:"); a.jiami1(); //调用加密函数 System.out.print("解密后为:"); a.jiemi(); //调用解密函数 } }
(4)结果截图
5.整理String类的Length()、charAt()、 getChars()、replace()、 toUpperCase()、 toLowerCase()、trim()、toCharArray()使用说明
Length()是用来计算字符串的长度
charAt()是用来取字符串的第几个字符
getChars()是用来获取从指定位置起的子串复制到字符数组中(它有四个参数,在示例中有介绍)
replace()子串替换
toUpperCase()、 toLowerCase()大小写转换
trim()去除头尾空格
toCharArray()将字符串对象转换为字符数组