密码加密&&动手动脑
动手动脑
一、
请运行以下示例代码StringPool.java,查看其输出结果。如何解释这样的输出结果?从中你能总结出什么?
运行结果
结论
1、在Java中,内容相同的字串常量(“Hello”)只保存一份以节约内存,所以s0,s1,s2实际上引用的是同一个对象。
2、编译器在编译s2一句时,会去掉“+”号,直接把两个字串连接起来得一个字串(“Hello”)。这种优化工作由Java编译器自动完成。
3、当直接使用new关键字创建字符串对象时,虽然值一致(都是“Hello”),但仍然是两个独立的对象。比较的是两个对象的地址,地址不同所以是false。
4、可以调用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); //所指向地址为常量 false
System.out.println(s1.equals(s2));//字符串判断 true
String s3="Hello"; //新开辟空间
String s4="Hello"; //新开辟空间
System.out.println(s3==s4); //判断输出
System.out.println(s3.equals(s4)); //字符串判断输出
}
}
3.String类的Length();
length本身就是长度的意思,在这里还是长度的意思,在数组中会经常被用到,就是调取数组长度的一个方法
假如定义一个数组a,就可以a.length来判断此前数组a的长度。
4.String类的CharAt();
charAt()就是查询字符串中具体位置的元素内容的方法
例如:String string=“qwertyuiop”;
char a=string.charAt(3);
这里a就是string中的第四个元素的内容,因为开始第一个元素的下标志为0,是从0开始的,所以查“3”号位置的内容就是第四个元素的信息。
5.String类的getchars();
java.lang.String.getChars() 方法从这个字符串中的字符复制到目标字符数组
要复制的第一个字符在索引srcBegin处,被复制的最后一个字符是在的索引srcEnd1即要复制的字符总数是srcEnd srcBegin处。
字符被复制到子数组开始在指数dstBegin和结束于索引:dstbegin + (srcEnd-srcBegin) - 1
以下是声明java.lang.String.getChars()方法
声明这个方法的代码是:
public void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
6.String类的replace
replace是代替替换的意思,在这里还是这意思replace(-,-)就是有一个新的返回值代替原来所有的旧的东西。
返回一个新字符串,其中当前实例中出现的所有指定字符串都替换为另一个指定的字符串。
7.String类的uppercase
这个类是转换大小写的,是将小写转换为大写,是将字符或串转换为大写
8.String类的lowercase
这个与uppercase是相反的,这个是将字符串大写转化为小写。
9.String类的trim();
trim就是从当前字符串对象移除所有前导空白字符和尾部空白字符。
也就是说一个字符串前导有空格或是后导有空格或是两边都有的时候将其删除
假设有一个字符串" qwer ",经过Trim()之后成为"qwer",如上只去掉两边多余的空格(包括制表符)。
10.String类的toChrArray()
这个方法就是将字符串转化为数组进行存储,将所有的内容信息进行存储。
例如String string ="qwert';
char list[]=string.tocharArray();
就是将string字符串的内容信息存储的list的数组中.
古罗马皇帝凯撒在打仗时曾经使用过以下方法加密军事情报:
请编写一个程序,使用上述算法加密或解密用户输入的英文字串要求设计思想、程序流程图、源代码、结果截图。
设计思想:
整体思想即为将用户输入的字符串变为字符数组,然后进行加密运算,将加密后的字符数组再变回字符串输出即可。
首先定义int变量length以后来取得用户输入字符串长度,定义string变量zifu取得用户输入字符串。然后用Scanner读取用户输入的字符串,接着读取字符串长度。用tochararray方法将字符串转为字符数组。然后根据a到w的字符每个向后加3,x,y,z这三个每个减去23得到变换后的字符。然后定义可以自由变换长度的stringbuffer类型arr,用append方法,接着定义string newstr用tostring方法将加密后的字符数组转换为字符串进行输出。
源代码:
package jiami;
//65~90为26个大写英文字母,97~122号为26个小写英文字母
import java.util.Scanner;
public class Screat {
privatestatic Scanner scan; //私有静态Scanner类变量
public static void main(String[] args){
int length; //用户输入的字符串长度
String zifu; //用户输入的字符串
scan = new Scanner(System.in); //给scan申请空间
System.out.println("请输入英文字符串:");
zifu = scan.nextLine(); //读取用户输入的字符串并赋值给zifu
System.out.println("你输入的字符串为:"+zifu);
length = zifu.length(); //得到用户输入字符串的长度
char array[] = zifu.toCharArray(); //将用户输入的字符串转化为字符数组
for(int i=0;i<length;i++) //将每个字符进行变换
{ //a到w的字符每个向后加3,x,y,z这三个每个减去23得到变换后的
if((array[i]>=65&&array[i]<=87)||(array[i]>=97&&array[i]<=119))
array[i]=(char) (array[i]+3);
else if((array[i]>=88&&array[i]<=90)||(array[i]>=120&&array[i]<=122))
array[i]=(char) (array[i]-23);
}
StringBuffer arr = new StringBuffer(); //定义一个stringbuffer类的变量arr
for(int i=0;i<length;i++)
{
arr.append(array[i]); //运用append方法,参考StringBufferAppend。java
}
String newstr = arr.toString(); //将变换后的重新组合为字符串
System.out.println("加密后的英文为:"+newstr); //打印组合后的字符串
}
}