字符串动手动脑

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

public class StringPool {
    
	public static void main(String args[])
    {
        
		String s0="Hello";
        
		String s1="Hello";
        
		String s2="He"+"llo";
        
		System.out.println(s0==s1);//true
        
		System.out.println(s0==s2);//true
        
		System.out.println(new String("Hello")==new String("Hello"));//false
    	
	}


}

在java中+是连接符,编译器编译s2时会去掉+,s0,s1,s2指向同一个对象,所以出现true,而后来新创建的两个地址不同,所以false。

String s1 = "a";

String s2 = s1;

System.out.println(s1==s2); //true

s1+="b";

System.out.println(s1==s2);//false

System.out.println(s1=="ab");//false

System.out.println(s1.equals("ab"));//true

两个变量(s1,s2)现在引用同一个字符串对象“a”! String对象的内容是只读的,使用“+”修改s1变量的值,实际上是得到了一个新的字符串对象,其内容为“ab”,它与原先s1所引用的对象”a”无关,所以,s1==s2返回false; 代码中的“ab”字符串是一个常量,它所引用的字符串与s1所引用的“ab”对象无关。 String.equals()方法可以比较两个字符串的内容。

2.请查看String.equals()方法的实现代码,注意学习其实现方法。

当对象不同,内容相同,"=="返回false,equals返回true

当同一对象,"=="和equals结果相同

如果值不相同,对象就不相同,所以"==" 和equals结果一样

public class StringPool {
    
	public static void main(String args[])
    {
        
		String s0="Hello";
		String s1="Hello";
		String s2="He"+"llo";
		System.out.println(s0==s1);
		System.out.println(s0==s2);
		String S3 = new String("Hello");
		String S4=new String("Hello");
        
		System.out.println(S3.equals(S4));    
    	
	}

}

 可用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); ….

public class StringPool {
    
	public static void main(String args[])
    {
		String str="abc";
		String result=str.trim().toUpperCase().concat("defg");
		System.out.println(result);

	}
}

  

4、字串加密

import java.util.Scanner;
public class Testfive {
	public static void main(String[]args){
		System.out.println("请输入任意字串");
		Scanner in=new Scanner(System.in);//读入字符串
		String s1=null;
		s1=in.nextLine();
		char a[]=new char[s1.length()];
		s1.getChars(0,s1.length(),a,0);//获取从指定位置起的子串复制到字符数组中
		char b[]=new char[s1.length()];
		for(int i=0;i<s1.length();i++)
		{
		 b[i]=(char) (a[i]+3);
		}
		for(int i=0;i<s1.length();i++)
		{
		
			System.out.print(b[i]);
		}
   }
}

程序设计思想:

在键盘上输入任意字符串,然后先创建一个与输入字符串同等长度的数组,然后将字符串复制到此数组中,再重新创建一个同等长度的数组用来储存加密后的字符,然后把加密后的字符输出即可。

程序流程图:

5、整理String类的Length()、charAt()、 getChars()、replace()、 toUpperCase()、 toLowerCase()、trim()、toCharArray()使用说明、阅读笔记发表到博客园。

1)length():public int length()//求字符串长度

String s=”abcdefg”;

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

charAt():public charAt(int index)//index 是字符下标,返回字符串中指定位置的字符

        String s=”Hello”;

        System.out.println(s.charAt(3));

getChars():public int getChars()//将字符从此字符串复制到目标字符数组

replace():public int replace()//替换字符串

        String s=”\”;

        System.out.println(s.replace(“\”,”///”));

        结果///;

toUpperase():public String toUpperCase()//将字符串全部转换成大写

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

toLowerCse():public String toLowerCase()//将字符串全部转换成小写

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

trim():public String trim()

         String x=”ax  c”;

         System.out.println(x.trim());//是去两边空格的方法

toCharArray(): String x=”abcd”;// 将字符串对象中的字符转换为一个字符数组

           char myChar[]=x.toCharArray();

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

原文地址:https://www.cnblogs.com/1998lu/p/6005429.html