标签: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():将字符串对象转换为字符数组。
动手动脑一
实验结果:
总结:在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 str="abc";
String result=str.trim().toUpperCase().concat("defg");
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);
}
}
实验结果:
标签:win bd09 ora port owa gtk via scsi gnu
原文地址:http://www.cnblogs.com/lizhaoxuan/p/6005885.html