java课后实验性问题5
课后作业一:字符串加密
程序设计思想:
从键盘获取字符串,将字符串转为字符数组,将每个元素加事前协定的“key”,再转为字符串输出。
程序流程图:
源代码:
import java.util.Scanner; public class Test{ public static void main(String args[]){ String str1,str2; System.out.print("输入字符串:"); Scanner sc = new Scanner(System.in); str1 = sc.nextLine(); char [] ch = str1.toCharArray(); for(int i = 0; i < ch.length; i++){ int n = 0, m = 0; n = ch[i]; m = n + 3; ch[i] = (char)m; } String str = new String(ch); str2 = str; System.out.println("加密后的字符串:"+str2); } }
结果截图:
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); System.out.println(s0 == s2); System.out.println(new String("Hello") == new String("Hello")); } }
结果:
String中当字符串相同时,为节省空间,相同的字符串使用引用。比较的是对象地址。s0==s1 s1为s0的引用,地址相同,所以为true。
s2 中“+”为连接,s2值为Hello s0==s2 s2为s1的引用,地址相同,所以为true。
System.out.println(new String("Hello")==new String("Hello")) 创建了新的对象,两个独立对象地址不同,所以为flase。
总结:String中当字符串相同时,为节省空间,相同的字符串使用引用。
public class StringPool { public static void main(String args[]){ String s1 = "a"; String s2 = s1; System.out.println(s1 == s2); s1+=”b”; System.out.println(s1 == s2); System.out.println(s1 == ”ab”); System.out.println(s1.equals(“ab”)); } } 结果:ture false false ture
给变量赋值s1、s2引用同一个对象,所以为true。
s1+=b,后得到一个“ab”与“a”无关,所以为false。
s1==“ab”ab是常量与对象无关,所以为false。
String.equals()方法可以比较两个字符串内容。所以为false。
总结:String.equals()方法可以比较两个字符串内容。
3. 字符串比较,查看String.equals()方法实现代码。
public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String)anObject; int n = value.length; if (n == anotherString.value.length) { char v1[] = value; char v2[] = anotherString.value; int i = 0; while (n-- != 0) { if (v1[i] != v2[i]) return false; i++; } return true; } } return false; }
使用:
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)); } }
结果:
4. String类的方法整理。
Length(): 返回此字符串的长度。长度是等于Unicode代码单元中的字符串的数目。 使用: import java.lang.*;
public class StringDemo { public static void main(String[] args) { String str = "tutorials point"; System.out.println("length of string = " + str.length()); str = ""; System.out.println("length of string = " + str.length()); } } 结果: length of string = 15 length of string = 0
charAt(): 此方法返回位于字符串的指定索引处的字符。该字符串的索引从零开始。 例子: getChars: import java.lang.*;
public class Test { public static void main(String args[]){ String s = "Strings are immutable"; char result = s.charAt(8); System.out.println(result); } } 结果:返回a。
replace(): 方法返回一个新的字符串替换此字符串中出现的所有oldChar与newChar. 例子: import java.lang.*;
public class StringDemo { public static void main(String[] args) { String str = "aacdeaa"; System.out.println("string = " + str); String replaceStr = str.replace('a', 'b'); System.out.println("new string = " + replaceStr); } } 结果:string = aacdeaa new string = bbcdebb
toUpperCase(): 此方法返回转换为大写的字符串。 例子: import java.lang.*;
public class StringDemo { public static void main(String[] args) { String str1 = "aaabbbccc"; System.out.println("string value = " + str1.toUpperCase()); } } 结果:AAABBBCCC
toLowerCase(): 此方法返回转换为小写的字符串。 例子: import java.lang.*;
public class StringDemo { public static void main(String[] args) { String str1 = "AAABBBCCC"; System.out.println("string value = " + str1.toLowerCase()); } } 结果:aaabbbccc
trim(): 去掉字符串首尾的空格。 例子: import java.lang.*;
public class Test{ public static void main(String arg[]){ String a = " hello world "; String b = "hello world"; System.out.println(b.equals(a)); System.out.println(a); a=a.trim(); System.out.println(a.equals(b)); System.out.println(a); System.out.println(b); } } 结果:false true hello world hello world hello world
toCharArray(): 把这个字符串转换成一个新的字符数组. 例子: import java.lang.*;
public class StringDemo { public static void main(String[] args) { String str = " Java was developed by James Gosling"; char retval[] = str.toCharArray(); System.out.println("Converted value to character array = "); System.out.println(retval); } } 结果: Converted value to character array = Java was developed by James Gosling
5.模仿String类连续调用。 public class Test{ public static void main(String args[]){ MyCounter counter1 = new MyCounter(1); MyCounter counter2 = new MyCounter(); counter2 = counter1.increase(100).decrease(2).increase(3); System.out.println(counter2.i); } } class MyCounter{ public int i; MyCounter(){} MyCounter(int n){ this.i = n; } public MyCounter increase(int n){ MyCounter a = new MyCounter(); a.i = i + n; return a; } public MyCounter decrease(int n){ MyCounter a = new MyCounter(); a.i = i - n; return a; } } 结果:102