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

 

 

posted @ 2017-10-26 17:06  什么名都不好  阅读(147)  评论(0编辑  收藏  举报