码迷,mamicode.com
首页 > 编程语言 > 详细

Java字符串课后作业

时间:2016-10-27 23:32:08      阅读:293      评论:0      收藏:0      [点我收藏+]

标签:win   bd09   ora   port   owa   gtk   via   scsi   gnu   

实验任务】

1、实验题目:字串加密

2、实验内容:古罗马皇帝凯撒在打仗时曾经使用过以下方法加密军事情报:

技术分享 

3、设计思想:本程序共分为部分:1、利用输入语句输入用户要加密的字符串,有两种方法:(1)利用scanner语句输入,然后利用.nextLine()转换为string类型的字符串。(2)利用窗口输入语句,JOptionPane.showInputDialog(“…”),输入的就是string类型的字符串。2、定义一个flag判断该字符串中是否含有不符合规定的字符,如果有在输出的时候输出用户输入错误的字符。3、定义两个string字符串,一个是存储正确的字符,另一个是存储不符合规定的字符。利用for循环和if语句,将输入的字符分成两部分一部分是a-w和A-W,转换方法为+3。第二部分为x-z和X-Z,转换方法为—23,得到abc。4、输出加密后的字符串或输出输入错误的字符,同样和输入时一样有两种方法,本程序采用的第二种方法。

4、程序流程图:

 技术分享

5、源代码:Kaisa.java

//字串加密。

//ZhaoXuan Li,October 27th,2016.

 

import javax.swing.JOptionPane;

 

public class Kaisa

{

       public static void main(String[] args)

       {

              String a=JOptionPane.showInputDialog("请输入要加密的明文:");

              boolean flag=true;

              int s=a.length(),i;

              String output="",output1="";

             

              for(i=0;i<s;i++)

              {

                     if((a.charAt(i)<=‘w‘&&a.charAt(i)>=‘a‘)||(a.charAt(i)<=‘W‘&&a.charAt(i)>=‘A‘))

                     {

                            output+=(char)(a.charAt(i)+3);

                     }

                     else if((a.charAt(i)>=‘x‘&&a.charAt(i)<=‘z‘)||(a.charAt(i)>=‘X‘&&a.charAt(i)<=‘Z‘))

                     {

                            output+=(char)(a.charAt(i)-23);

                     }

                     else

                     {

                            output1+=a.charAt(i);

                            output1+=" ";

                            flag=false;

                     }

              }

             

              if(flag) JOptionPane.showMessageDialog(null,"您输入的明文为:"+a+"\n译文为:"+output,"encryption",JOptionPane.PLAIN_MESSAGE);

              else JOptionPane.showMessageDialog(null,"您输入的"+output1+"不符合要求(不在大小写字母范围内!)","errow",JOptionPane.PLAIN_MESSAGE);

       }

}

6、结果截图:

 

 

技术分享技术分享

技术分享 

技术分享技术分享

 

课后作业

课后作业之字串加密、动手动脑之String.equals()方法、整理String类的Length()、charAt()、 getChars()、replace()、 toUpperCase()、 toLowerCase()、trim()、toCharArray()使用说明、阅读笔记

Length():获取字符串长度,字符串是一个对象,在这个对象中包含length属性,使用String类中的length()方法可以获取字符串长度。

 

charAt():获取指定位置的字符。

 

getChars():获取从指定位置起的子串复制到字符数组中(它有四个参数,1.被拷贝字符在字串中的起始位置 2.被拷贝的最后一个字符在字串中的下标再加1      3.目标字符数组 4.拷贝的字符放在字符数组中的起始下标)。

 

replace():字符串替换,通过String类的replace()方法,可以将原字符串中的某个字符替换为指定的字符,并得到一个新的字符串,该方法的具体定义如下:public String replace(char oldChar,char newChar)。

 

toUpperCase():大写转换,在String类中提供用来实现字母大写转换的方法,返回值为转换后的字符串,方法toUpperCase()用来将字符串中的所有小写字母改为大写字母。

 

toLowerCase()、小写转换,在String类中提供用来实现字母小写转换的方法,返回值为转换后的字符串,方法toLowerCase()用来将字符串中的所有大写字母改为小写字母。

 

trim():去除头尾空格,通过String类的trim()方法,可以通过去掉字符串的首尾空格得到一个新的字符串,该方法的具体定义如下:public String trim()。

 

toCharArray():将字符串对象转换为字符数组。

 

动手动脑一

  • ? 请运行以下示例代码StringPool.java,查看其输出结果。如何解释这样的输出结果?从中你能总结出什么?

技术分享 

实验结果:技术分享

总结:在Java中,内容相同的字串常量(“Hello”)只保存一份以节约内存,所以s0,s1,s2实际上引用的是同一个对象。

编译器在编译s2一句时,会去掉“+”号,直接把两个字串连接起来得一个字串(“Hello”)。这种优化工作由Java编译器自动完成。

当直接使用new关键字创建字符串对象时,虽然值一致(都是“Hello”),但仍然是两个独立的对象。

 

动手动脑二

再看……

 技术分享

为什么会有上述的输出结果?从中你又能总结出什么?

总结:给字串变量赋值意味着:两个变量(s1,s2)现在引用同一个字符串对象“a”!

String对象的内容是只读的,使用“+”修改s1变量的值,实际上是得到了一个新的字符串对象,其内容为“ab”,它与原先s1所引用的对象”a”无关,所以,s1==s2返回false;

代码中的“ab”字符串是一个常量,它所引用的字符串与s1所引用的“ab”对象无关。

String.equals()方法可以比较两个字符串的内容。

 

动手动脑三

请查看String.equals()方法的实现代码,注意学习其实现方法。

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));

    }

}

实验结果:技术分享

 

动手动脑四

  • ? String类的方法可以连续调用:

String str="abc";

String result=str.trim().toUpperCase().concat("defg");

  • ? 请阅读JDK中String类上述方法的源码,模仿其编程方式,编写一个MyCounter类,它的方法也支持上述的“级联”调用特性,其调用示例为:

MyCounter counter1=new MyCounter(1);

MyCounter counter2=counter1.increase(100).decrease(2).increase(3);

.

实验代码:MyCounter.java

//模仿其编程方式,编写一个MyCounter类,它的方法也支持上述的“级联”调用特性。

//ZhaoXuan Li,October 27th,2016.

 

public class MyCounter

{

    public static void main(String[] args)

    {

        String s="aqz";

        String result=s.trim().toUpperCase().concat("qwe");

        System.out.println(result);

    }

}

实验结果技术分享

Java字符串课后作业

标签:win   bd09   ora   port   owa   gtk   via   scsi   gnu   

原文地址:http://www.cnblogs.com/lizhaoxuan/p/6005885.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!