实验任务】

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字符串课后作业的更多相关文章

  1. Java数组课后作业

    1.运行TestArrays.java,了解Arrays中的一些重要方法的用法. Arrays.equals(a 1, a2):判断数组是否相等. int[] b = Arrays.copyOf(a, ...

  2. 05String字符串课后作业

    1.请运行以下示例代码StringPool.java,查看其输出结果.如何解释这样的输出结果?从中你能总结出什么? 由此可得出,用加号连接的字符串和一整个字符串相同代码判断是true,而新开辟空间的不 ...

  3. Java课程课后作业190315之从文档中读取随机数并得到最大连续子数组

    从我上一篇随笔中,我们可以得到最大连续子数组. 按照要求,我们需要从TXT文档中读取随机数,那在此之前,我们需要在程序中写入随机数 import java.io.File; import java.i ...

  4. java课程课后作业05之动手动脑

    一.使用Files. walkFileTree()找出指定文件夹下所有大于指定大小(比如1M)的文件 此代码没有使用walkfiletree,两者的差别在于walkfiletree在遍历文件的时候有一 ...

  5. JAVA课程课后作业03之作业一

    作业:使用类的静态字段和构造函数,可以跟踪某个类所创建对象的个数.请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象?”. 代码: package TestJava; import java ...

  6. java ppt课后作业

    1 .仔细阅读示例: EnumTest.java,运行它,分析运行结果? 枚举类型是引用类型,枚举不属于原始数据类型,它的每个具体值都引用一个特定的对象.相同的值则引用同一个对象.可以使用“==”和e ...

  7. java课程课后作业190425之一维数组最大子数组(界面实现)

    题目要求: 1.在第一个问题过程中,我在以前的代码中好像已经写出了这个功能,想要实现这个功能,我们只需要在我们储存的数组和是负数的时候对中转值进行重新赋值就可以得到新的数值的起始位置,而他的终了位置就 ...

  8. Java的课后作业——18.10.18

    日期:2018.10.18 星期四 博客期:020 小试验任务: 我就发一下代码好了!!! package test1; import java.util.Scanner; public class ...

  9. java课程课后作业04之动手动脑

    一.多层的异常捕获-1 先贴出代码: public class CatchWho { public static void main(String[] args) { try { try { thro ...

随机推荐

  1. springboot使用 @EnableScheduling、@Scheduled开启定时任务

    1.在main启动项添加一个注解@EnableScheduling package com.example.springmybatis; import org.mybatis.spring.annot ...

  2. MyBatis的发展和选型

    xlecho编辑整理,欢迎转载,转载请声明文章来源.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.--这才是真正的堪称强大!! 参考 ...

  3. sql 多行、一行 互转

    原始数据: 期望数据: IF OBJECT_ID('temp_20170701','u') IS NOT NULL DROP TABLE temp_20170701 CREATE TABLE temp ...

  4. mvn deploy:deploy-file命令

    mvn deploy:deploy-file -DgroupId=com.gome -DartifactId=jwebservices -Dversion=2.0 -Dpackaging=jar -D ...

  5. <%@ include %>导入的文件乱码

    如: <% String ss = (String) session.getAttribute("username"); if (ss == null || ss == &q ...

  6. 【学习笔记】第二章 python安全编程基础---python爬虫基础(urllib)

    一.爬虫基础 1.爬虫概念 网络爬虫(又称为网页蜘蛛),是一种按照一定的规则,自动地抓取万维网信息的程序或脚本.用爬虫最大的好出是批量且自动化得获取和处理信息.对于宏观或微观的情况都可以多一个侧面去了 ...

  7. JAVA多线程高并发面试题总结

    ReadMe : 括号里的内容为补充或解释说明. 多线程和高并发是毕业后求职大厂面试中必问的知识点,自己之前总是面试前才去找相关的知识点面试题来背背,隔段时间又忘了,没有沉淀下来,于是自己总结了下相关 ...

  8. Scala 系列(十三)—— 隐式转换和隐式参数

    一.隐式转换 1.1 使用隐式转换 隐式转换指的是以implicit关键字声明带有单个参数的转换函数,它将值从一种类型转换为另一种类型,以便使用之前类型所没有的功能.示例如下: // 普通人 clas ...

  9. day 12 特殊权限

    1.suid (set uid) 特殊权限 suid优点: 可以让普通用户执行无法执行的命令 方便 suid缺点: 如果rm 为suid, 无论谁执行该命令,都能删除系统的任何 资源 set uid ...

  10. 09 (OC)* 键路径(keyPath)、键值编码(KVC)、键值观察(KVO)

    键路径在一个给定的实体中,同一个属性的所有值具有相同的数据类型.键-值编码技术用于进行这样的查找—它是一种间接访问对象属性的机制. - 键路径是一个由用点作分隔符的键组成的字符串,用于指定一个连接在一 ...