第六周10.24

1.字符串加密解密工作

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

程序设计思想:设计类进行方法的定义,定义两个带参数的方法分别为解密和加密。在测试类中判断要进行的工作,是加密还解密,定义对象,引用类的方法

程序流程图:

程序源代码:

package kehoua;
import java.util.Scanner;
class Test
{    
    public void jiami(String n)//对输入的字符串进行加密
    {
        String k=" ";
        for(int i=0;i<n.length();i++)
        {
            char b=n.charAt(i);
            if(b>='A'&&b<='Z')
            {
                if(b>='X'&&b<='Z')
                {
                    b=(char) (b-23);
                }
                b=(char) (b+3);
            }
            k=k+b;//将加密之后的字符串赋值给k
        }
        System.out.println("加密之后的字符串为"+k);
    }
    public void jiemi(String n)//对输入的字符串进行解密
    {
        String k=" ";
        for(int i=0;i<n.length();i++)
        {
            char b=n.charAt(i);
            if(b>='A'&&b<='Z')
            {
                if(b>='A'&&b<='C')
                {
                    b=(char) (b+23);
                }
                b=(char) (b-3);
            }
            k=k+b;//将解密之后的字符串赋值给k
        }
        System.out.println("解密之后的字符串为"+k);
    }
}
public class Jiami 
{
    public static void main(String[] args)
    {
        Test h=new Test();
        Scanner in=new Scanner(System.in);
        String x=null;//初始化要输入的字符串
        int i=0;
        System.out.println("进行加密请输入1,解密输入2");
        System.out.println("请输入你想进行的操作:");
        i=in.nextInt();
        if(i==1)
        {
            System.out.println("请输入要进行加密的字符串:");
            x=in.next();
            h.jiami(x);//调用Test中的加密方法
        }
        else if(i==2)
        {
            System.out.println("请输入要进行解密的字符串:");
            x=in.next();
            h.jiemi(x);//调用Test中的解密方法
        }
        else //异常字符的处理
        {
            System.out.println("输入的字符不合法");
        }
    }
}

程序执行结果截图:

试验后总结

本次编写在字符串的变化中出现问题,ASCII值的加减出现问题,以及字符串与ASCII值之间的相互转换

2.动手动脑

(1)源代码

package kepool;
public class StringPool 
{ 
    public static void main(String args[])
    {       
        String s0="Hello";       
        String s1="Hello";       
        String s2="He"+"llo";        
        System.out.println(s0==s1);//true        
        System.out.println(s0==s2);//true        
        System.out.println(new String("Hello")==new String("Hello"));//false        
    }
}

结果截图

原因分析:在Java中,内容相同的字串常量“Hello”只保存一份,以节约内存,所以s0,s1,s2实际上引用的是同一个对象,所以在进行判断的时候输出结果为true;而当直接使用new关键字创建字符串对象时,虽然值一都是“Hello”,但仍然是两个独立的对象,在进行判别的时候地址不同,系统输出false

(2)

package kepool;
public class StringPool1 
{
    public static void main(String[] args)
    {
        String s1="a";
        String s2=s1;
        System.out.println("s1==s2");//true
        s1+="b";
        System.out.println("s1==s2");//false
        System.out.println(s1=="ab");//false
        System.out.println(s1.equals("ab"));//true
    }
}

执行结果截图

原因分析:第一个true,因为给字串变量赋值意味着:两个变量(s1,s2)现在引用同一个字符串对象“a”!
第二个false因为String对象的内容是只读的,使用“+”修改s1变量的值,实际上是得到了一个新的字符串对象,其内容为“ab”,它与原先s1所引用的对象”a”无关,所以,s1==s2返回false;
第三个false因为代码中的“ab”字符串是一个常量,它所引用的字符串与s1所引用的“ab”对象无关。
第四个true的输出是因为String.equals()方法可以比较两个字符串的内容,而内容都是ab,所以输出true

(3)String.equals()方法的实现代码

package kepool;
public class StringEquals {    
/**
     * @param args the command line arguments
     */
        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));    
    }
}

第一个false因为新建了两个s1,s2字符串对象地址不同,所以判别为false,当时用String.equals()方法后,s1.equals(s2)比较的是s1s2之内的字符串的内容,都为hello所以true

内容相同的字串常量“Hello”只保存一份,以节约内存,所以s3s4直接对比为true

3.整理String类的Length()、charAt()、 getChars()、replace()、 toUpperCase()、 toLowerCase()、trim()、toCharArray()

length():public int length()//求字符串长度

         String s=”dwfsdfwfsadf”;

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

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

        String s=”Hello”;

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

getChars():public int getChars()//将字符从此字符串复制到目标字符数组

        String str = "abcdefghikl";

        Char[] ch = new char[8];

        str.getChars(2,5,ch,0);

replace():public int replace()//替换字符串

        String s=”\”;

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

        结果///;

toUpperase():public String toUpperCase()//将字符串全部转换成大写

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

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

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

trim():public String trim()

         String x=”ax  c”;

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

toCharArray(): String x=”abcd”;// 将字符串对象中的字符转换为一个字符数组

           char myChar[]=x.toCharArray();

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

原文地址:https://www.cnblogs.com/xuzhaoyang/p/7743650.html