字符串 - 课后作业

一 . 字串加密:

实验题目:古罗马皇帝凯撒在打仗时曾经使用过以下方法加密军事情报,请编写一个程序,加密或解密用户输入的英文字串

设计思想:

(1)首先定义一个字符串,取出单个字符,每个字符前移三位,后移三位。(注意在加密时XYZ的变化和解密时ABC的变化)

(2)创建字符串对象s,将新得到的字符加在s后面。

(3)输出s。

          可通过设置两个选项提示用户进行解密还是加密

流程图:

 

 

源代码:

import java.util.Scanner;

public class Mima 
{
public static void main(String[] args) 
{

	System.out.println("请选择:");
	System.out.println("1.加密");
	System.out.println("2.解密");//设置选项提示用户进行什么操作
	Scanner input=new Scanner(System.in);
    int c=input.nextInt();//输入选项
    
    if(c==1)
    {
    	System.out.println("请输入要加密的语句:");
    	String str=input.next();//将输入的字符串存到str中
    	char[] a=new char[str.length()];
		a=str.toCharArray();
		for(int i=0;i<str.length();i++)//将X、Y、Z转化为A、B、C
			{
			if(a[i]=='X')         a[i]='A';
			else if(a[i]=='Y')    a[i]='B';
			else if(a[i]=='Z')    a[i]='C';
			else if(a[i]=='x')	  a[i]='a';
			else if(a[i]=='y')	  a[i]='b';
			else if(a[i]=='z')	  a[i]='c';
			
			
			else
			{
			a[i]=(char)(a[i]+3);//将一般的数组字符直接加3然后强转为char
			}
			}
		String s="";
		for(int i=0;i<str.length();i++)//将字符数组转化为字符串
			{
			s=s+a[i];
			}
		System.out.println("加密后的语句为:"+s);//输出语句
	}
    
    else if(c==2)
    {
    	System.out.println("请输入要解密的语句:");
    	String str=input.next();//将输入的字符串存到str中
    	char[] a=new char[str.length()];
    	a=str.toCharArray();
    	for(int i=0;i<str.length();i++)//将A、B、C转化为X、Y、Z
    		{
    		if(a[i]=='A')         a[i]='X';
			else if(a[i]=='B')    a[i]='Y';
			else if(a[i]=='C')    a[i]='Z';
			else if(a[i]=='a')	  a[i]='x';
			else if(a[i]=='b')	  a[i]='y';
			else if(a[i]=='c')	  a[i]='z';
    		else
    		{
    			a[i]=(char)(a[i]-3);//将一般的数组字符直接减3然后强转为char
    			
    		}
    		}
    	String s="";
    	for(int i=0;i<str.length();i++)//将字符数组转化为字符串
    		{
    		s=s+a[i];
    		}
    	System.out.println("解密后的语句为:"+s);//输出语句
    }
    	
    else {
    	System.out.println("ERROR!");
    }
}
}

  

 运行截图:

 

 二 . 动手动脑问题

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

分别输出true true false 

总结:在Java中,内容相同的字串常量(“Hello”)只保存一份以节约内存,所以s0,s1,s2实际上引用的是同一个对象。编译器在编译s2一句时,会去掉“+”号,直接把两个字串连接起来得一个字串(“Hello”)。这种优化工作由Java编译器自动完成。  所以前两个输出为true。当直接使用new关键字创建字符串对象时,虽然值一致(都是“Hello”),但仍然是两个独立的对象。所以最后一个输出为false。

 

 2 .查看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));
      
	}
}

 结果截图:

 

3 . 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:

public class MyCounter

{public static void main(String[]  args)

{  String s="abc";

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

        System.out.println(result);

    }

}

 4 . 整理String类的Length()、charAt()、 getChars()、replace()、 toUpperCase()、toLowerCase()、trim()、toCharArray()使用说明

Length():获取字串长度

例:String str =”abc”;

       System.out.println(str.length());

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

例:String str=”abc”;

       System.out.println(str.charAt(0));

getChars():获取从指定位置起的子串复制到字符数组中

例: String   s= "abc";  

        Char[] ch = new char[8]; 

        str.getChars(2,3,ch,0);

replace():子串替换

 例: String s=”abc”;

         System.out.println(s.replace(“abc”,”xyz”));

toUpperCase()、 toLowerCase():大小写转换  

例:System.out.println(new String(“hello”).toUpperCase());

       System.out.println(new String(“HELLO”).toLowerCase());

trim():去除头尾空格

例:String x=” a  bc ”;

       System.out.println(x.trim());

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

例:char myChar[]=x.toCharArray();

       System.out.println(“myChar[1]”+myChar[1]);

 

 

转载于:https://www.cnblogs.com/liboxun/p/7743710.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值