05字符串运用
课后作业1:字串加密
- 古罗马皇帝凯撒在打仗时曾经使用过以下方法加密军事情报:
请编写一个程序,使用上述算法加密或解密用户输入的英文字串要求设计思想、程序流程图、源代码、结果截图。
设计思想:
输入字符串->将字符串转换为单个字符->每个字符加3->连接字符串->字符串加密输出
程序流程图:
源代码:
//陶雨洁 2016/10/28 20153152
package 字符运用;
import javax.swing.*;
import java.util.Scanner;
public class Stringyy {
public static void main( String args[] )
{
//转为可用字符串
System.out.println("输入加密的字母字符");
Scanner input=new Scanner(System.in);
String mm=input.nextLine();
int n=mm.length();
String str1=new String();
for(int i=0;i<n;i++)
{
char a=mm.charAt(i);//取出单个字符
a=(char)(a+3);//每个字符对应加3得到对应的字符
str1=str1+a;//连接
}
System.out.println("加密后的为:"+str1);
}
}
结果截图:
课后作业2:动手动脑
请运行以下示例代码StringPool.java,查看其输出结果。如何解释这样的输出结果?从中你能总结出什么?
输出结果:
true ture false
思考:
Java将同一内容的字符串保存在同一个地址当中,字符==判断是判断地址和数据,所以s0==s1为true。而字符串+会自动连接,所以实际上s2就是String s2=”HELLO”;,s0==s2也为true。这些个都是使用的同一个内存空间,而一旦new就代表申请新的内存空间,结果就是不同的内存位置当然判等是就会显示false。
为什么会有上述的输出结果?从中你又能总结出什么?
输出结果:
True false false true
思考:
S1与s2引用同一个字符“a”,由于数据内容相同所以保存在同一个地址,s1==s2结果是true,String类型+=操作之后得到一个新的字符串对象,s1==s2为false。字符串常量地址和申请的字符串对象地址无关,所以s2==”ab”为false。
.equals()判断数据内容。
请查看String.equals()方法的实现代码,注意学习其实现方法。
实现代码提及String s1=newString(“hello”);与String s1=”hello”;的区别。我们知道new了一个新的对象之后,即便String数据内容相同但是地址仍是不同的,而如果是String类型变量赋值,结果却不同,同样数据内容的变量地址是相同的。
整理String类的Length()、charAt()、 getChars()、replace()、 toUpperCase()、 toLowerCase()、trim()、toCharArray()使用说明
Length():S. Length()代表字符串S的长度
charAt():S.charAt(i)代表S字符串提出单个第i个字符
getChars():charArray = new char[ 5 ];//定义一个字符串数组
s1.getChars( 0, 5, charArray, 0 );//将字符串S1从下标为0开始到下标为5保存在charAt数组当中,且拷贝的字符放在charAt的起始下标为0.
for ( int i = 0; i < charArray.length;i++ )
output += charArray[ i ];//以字符数组的形式输出字符
replace():将原字符串中的某个字符替换为指定的字符,并得到一个新的字符串
toUpperCase()、toLowerCase():大小写转换,toLowerCase()用来将字符串中的所有大写字母改为小写字母,,方法toUpperCase()用来将字符串中的所有小写字母改为大写字母。返回值均为已经转换的字符。
trim():去除头尾空格,得到一个新的字符串。
toCharArray():将字符串对象转换为字符数组