zoukankan      html  css  js  c++  java
  • 第六周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]);

  • 相关阅读:
    springMVC数据绑定入门
    网易云课堂js学习笔记
    Java MyBatis insert数据库数据后返回主键
    (转)关于离职
    mybatis异常:Caused by: java.lang.IllegalArgumentException: Result Maps collection already contains value for。。。。。。
    tomcat端口号被占用的问题
    tomcat中catalina是什么
    通过代码实现创建、删除、文件的读、写
    HNOI2008玩具装箱 斜率优化
    [ZJOI2008]骑士
  • 原文地址:https://www.cnblogs.com/xuzhaoyang/p/7743650.html
Copyright © 2011-2022 走看看