Java常用类(String&Object&Scanner)

Java常用类

  Object类:

   类 Object 是类层次结构的根类。每个类都使用 Object 作为超类(父类)。所有对象(包括数组)都实现这个类的方法。

hashCode();

 public int hashCode()返回该对象的哈希码值
  hashCode()----->通过哈希算法(哈希表:hashtable)---->地址值(不是实际意义上的地址值!

package org.westos_10_常用类;

public class ObjectDemo01 {
	public static void main(String[] args) {
		Student s1 = new Student();
		System.out.println(s1.hashCode());//随机产生一个哈希值118352462
		
		Student s2 = new Student();
		System.out.println(s2.hashCode());//1550089733
		
		System.out.println("love".hashCode());//3327858
		System.out.println("---------------------");
		
		
		//public final Class getClass()返回此 Object 的运行时类
		Class c1 = s1.getClass() ;
		System.out.println("c1:"+c1);//c1:class org.westos_10_常用类.Student
		
		String name = c1.getName();
		System.out.println("name: "+name);//name: org.westos_10_常用类.Student(全路径名称)
	}
}//随机产生一个哈希值118352462
		
		Student s2 = new Student();
		System.out.println(s2.hashCode());//1550089733
		
		System.out.println("love".hashCode());//3327858
		System.out.println("---------------------");
		
		
		//public final Class getClass()返回此 Object 的运行时类
		Class c1 = s1.getClass() ;
		System.out.println("c1:"+c1);//c1:class org.westos_10_常用类.Student
		
		String name = c1.getName();
		System.out.println("name: "+name);//name: org.westos_10_常用类.Student(全路径名称)
	}
}

*toString();

public String toString();返回该对象的字符串表示(建议所有子类都重写此方法)
 
  Integer类中有一个方法:
public static String toHexString(int i):将一个int类型的数据转换成一个十六进制的字符串表现形式
 
  如果直接输出对象名称,想要显示当前对象的成员变量的值,那么必须重写Object类中的toString()方法
 //toString()重写  自动生成 Alt+Shlft +s--->s
@Override
public String toString() {
return "Persen [name=" + name + ", age=" + age + "]";
}

public class ObjectDemo {
	public static void main(String[] args) {
		Persen p1 = new Persen("彭于晏 ",22);
		System.out.println("p1: " +p1);  //p1: org.westos_10_object.Persen@70dea4e
		//toString方法重写后打印            p1: Persen [name=彭于晏 , age=22]
		
		System.out.println("toString: "+p1.toString());

		System.out.println(p1.getClass().getName()+"@"+Integer.toHexString(p1.hashCode()));
		//toString: org.westos_10_object.Persen@70dea4e   toString: Persen [name=彭于晏 , age=22]
		
		
		/*
		     查看源码后:
		  public String toString() {
		        		return this.getClass().getName() + "@" + Integer.toHexString(this.hashCode());
		    		}

		  toString()  等价于    对象名.getClass().getName() +"@" +Integer.toHexString(对象名.hashCode())
		  
		  */
		
		System.out.println("---------------------------------");
		
		System.out.println(p1.getClass().getName()+"@"+Integer.toHexString(p1.hashCode()));
		/* org.westos_10_object.Persen@70dea4e
		   直接对象名称,想要显示成员变量的值,怎么办?
		   重写toString()方法 */

	}
}//p1: org.westos_10_object.Persen@70dea4e
		//toString方法重写后打印            p1: Persen [name=彭于晏 , age=22]
		
		System.out.println("toString: "+p1.toString());

		System.out.println(p1.getClass().getName()+"@"+Integer.toHexString(p1.hashCode()));
		//toString: org.westos_10_object.Persen@70dea4e   toString: Persen [name=彭于晏 , age=22]
		
		
		/*
		     查看源码后:
		  public String toString() {
		        		return this.getClass().getName() + "@" + Integer.toHexString(this.hashCode());
		    		}

		  toString()  等价于    对象名.getClass().getName() +"@" +Integer.toHexString(对象名.hashCode())
		  
		  */
		
		System.out.println("---------------------------------");
		
		System.out.println(p1.getClass().getName()+"@"+Integer.toHexString(p1.hashCode()));
		/* org.westos_10_object.Persen@70dea4e
		   直接对象名称,想要显示成员变量的值,怎么办?
		   重写toString()方法 */

	}
}


*equal();
 Object中的另一个方法:
  public boolean equals(Object obj)指示其他某个对象是否与此对象“相等”。返回一个boolean类型
  
  面试题:
  
== 和 equal()方法的区别
  
==:比较的是两个对象的地址值是否相同,
   equals()方法默认比较的是两个对象的地址值是否相同,如果重写了Object类中的equals()方法,那么默认比较就是两个对象的内容是否相同
  
  使用工具自动生成equals()方法
 
   在javascript:Array对象,Number对象,String对象,valueOf():====>s1.valueOf(s2) ;比较是内容是否相同

 

由于Object类中的equals()方法底层是通过"=="来实现的,所以默认比较的是地址值,如果想比较内容是否相同,需要重写equals()方法

public class ObjectDemo_ {
	
	public static void main(String[] args) {
		//创建对象
		Persen p1 = new Persen("李白",21);
		Persen p2 = new Persen("李白",21);
		System.out.println(p1 == p2);//地址不同   输出false
		System.out.println("------------------");
		
		Persen p3 = p1 ;
		System.out.println(p1==p3);//地址相同  true
		System.out.println("-------------------");
		System.out.println(p1.equals(p2));//false equals()方法默认比较的是地址值底层源码依赖"=="
		//想要比较内容必须重写equals()方法
		
		System.out.println(p1.equals(p2));//由于重写equals()方法,所以比较的是对象的内容是否相同! true

	}
}//创建对象
		Persen p1 = new Persen("李白",21);
		Persen p2 = new Persen("李白",21);
		System.out.println(p1 == p2);//地址不同   输出false
		System.out.println("------------------");
		
		Persen p3 = p1 ;
		System.out.println(p1==p3);//地址相同  true
		System.out.println("-------------------");
		System.out.println(p1.equals(p2));//false equals()方法默认比较的是地址值底层源码依赖"=="
		//想要比较内容必须重写equals()方法
		
		System.out.println(p1.equals(p2));//由于重写equals()方法,所以比较的是对象的内容是否相同! true

	}
}


  Object类中的其他两个方法:finalize()和clone()
   protected void finalize()throws Throwable:当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法,
 但是,什么时候调用垃圾回收器不确定;
  
 
  System类中的一个方法:
  public void gc():运行垃圾回收器,这个垃圾回收器最终调用的就是finalize()方法

   protected Object clone()创建并返回此对象的一个副本
               throws CloneNotSupportedException
                
 注意事项:
            Object 类的 clone 方法执行特定的复制操作。首先,如果此对象的类不能实现接口 Cloneable,则会抛出 CloneNotSupportedException。异常

//重写Object中的clone()方法
	@Override
	protected Object clone() throws CloneNotSupportedException {//抛出一个运行时异常
		
		return super.clone();
	}
	@Override
	protected Object clone() throws CloneNotSupportedException {//抛出一个运行时异常
		
		return super.clone();
	}
package org.westos_10_object_02;

import java.security.GeneralSecurityException;

public class ObjectDemo {                         //抛出声明    
	public static void main(String[] args) throws CloneNotSupportedException {
		
		Student s1 = new Student();
		s1.setName("李荣浩");
		s1.setAge(21);
		System.out.println(s1.getName()+" -- "+s1.getAge());//李荣浩 -- 21
		
		
		//复制s1对象
		Object obj = s1.clone() ;
		//向下转型
		Student s2 = (Student) obj;
		System.out.println(s1.getName()+"----"+s2.getAge());//李荣浩----21

	}
}//抛出声明    
	public static void main(String[] args) throws CloneNotSupportedException {
		
		Student s1 = new Student();
		s1.setName("李荣浩");
		s1.setAge(21);
		System.out.println(s1.getName()+" -- "+s1.getAge());//李荣浩 -- 21
		
		
		//复制s1对象
		Object obj = s1.clone() ;
		//向下转型
		Student s2 = (Student) obj;
		System.out.println(s1.getName()+"----"+s2.getAge());//李荣浩----21

	}
}


Scanner类:

package org.westos_10_scanner;

import java.util.Scanner;

/* 键盘录入两个方法:
 * 1)Scanner:用来创建一个文本扫描器(键盘录入)
   2)java高级特性:IO流(后面讲)
 		BufferReder:字符缓冲流来键盘录入
 	开发步骤:
 * 		1)创建键盘录入对象
 * 		2)录入数据
 * 		3)输出
	Scanner类中常用的方法:
 * 		
 * 		nextInt():录入int类型的数据
 * 		nextLine():录入一个字符串类型
 * 如果想要录入一个int类型的数,却输入了一个字符串,就会报出异常:
 * java.util.InputMismatchException:输入和想到的数据不匹配
 * 故加入一个判断的功能来避免
 * * 			判断的功能:
 * 					细节:可以添加逻辑判断
 * 					hasNextXXX(); 在录入数据之前,加上判断功能,判断是否由下一个可以录入的XXX类型的数据
 * 					nextXXX();//通过录入获取这个int类型的数据
 * 
 * 	举例:
 * 				public boolean hasNextInt()
 * 				nextInt();
 * 		
 * */

public class ScannerDemo1 {
	public static void main(String[] args) {
		//创建键盘录入对象(导包)
		Scanner sc = new Scanner(System.in);
		//判断
		if(sc.hasNextInt()) {
			int a = sc.nextInt();
			System.out.println("a:"+a);
		}else{
			//错误提示
			System.out.println("录入的数据类型和想要的不匹配!");
		}

	}
}/* 键盘录入两个方法:
 * 1)Scanner:用来创建一个文本扫描器(键盘录入)
   2)java高级特性:IO流(后面讲)
 		BufferReder:字符缓冲流来键盘录入
 	开发步骤:
 * 		1)创建键盘录入对象
 * 		2)录入数据
 * 		3)输出
	Scanner类中常用的方法:
 * 		
 * 		nextInt():录入int类型的数据
 * 		nextLine():录入一个字符串类型
 * 如果想要录入一个int类型的数,却输入了一个字符串,就会报出异常:
 * java.util.InputMismatchException:输入和想到的数据不匹配
 * 故加入一个判断的功能来避免
 * * 			判断的功能:
 * 					细节:可以添加逻辑判断
 * 					hasNextXXX(); 在录入数据之前,加上判断功能,判断是否由下一个可以录入的XXX类型的数据
 * 					nextXXX();//通过录入获取这个int类型的数据
 * 
 * 	举例:
 * 				public boolean hasNextInt()
 * 				nextInt();
 * 		
 * */

public class ScannerDemo1 {
	public static void main(String[] args) {
		//创建键盘录入对象(导包)
		Scanner sc = new Scanner(System.in);
		//判断
		if(sc.hasNextInt()) {
			int a = sc.nextInt();
			System.out.println("a:"+a);
		}else{
			//错误提示
			System.out.println("录入的数据类型和想要的不匹配!");
		}

	}
}
package org.westos.scanner_01;

import java.util.Scanner;

/**
 * Scanner类中的注意事项:
 * 			先录入int类型的数据,在录入String类型数据,第二次录入的数据没有接收到,直接输出结果了,由于"回车"才能接收数据
 * 回车换行符导致的!
 * 			解决方案:
 * 				在第二次录入String类型数据之前,需要重新创建键盘录入对象录入String类型
 * 		
 * */
public class ScannerDemo3 {
	
	public static void main(String[] args) {
		
		//键盘录入对象
		Scanner sc = new Scanner(System.in) ;
		
		//先录入两个int类型的数据
		/*int a = sc.nextInt() ;
		int b = sc.nextInt() ;
		System.out.println("a:"+a+",b:"+b);*/
		
		//录入两个String类型的数据
		//hasNextLine
		String a = sc.nextLine() ;
		String b = sc.nextLine() ;
		
		//先录入String类型的数据,在录入int类型的数据
		String a = sc.nextLine() ;
		int b = sc.nextInt() ;
		
		//先录入int类型,再录入String类型
		int a = sc.nextInt() ;
		//String b = sc.nextLine() ;
		String b = sc.next() ;
		
		int a = sc.nextInt() ;
		//创建键盘录入对象
		Scanner sc2 = new Scanner(System.in) ;
		String b = sc2.nextLine() ;
		
		
		
		System.out.println("a:"+a+",b:"+b);
	}
}

/**
 * Scanner类中的注意事项:
 * 			先录入int类型的数据,在录入String类型数据,第二次录入的数据没有接收到,直接输出结果了,由于"回车"才能接收数据
 * 回车换行符导致的!
 * 			解决方案:
 * 				在第二次录入String类型数据之前,需要重新创建键盘录入对象录入String类型
 * 		
 * */
public class ScannerDemo3 {
	
	public static void main(String[] args) {
		
		//键盘录入对象
		Scanner sc = new Scanner(System.in) ;
		
		//先录入两个int类型的数据
		/*int a = sc.nextInt() ;
		int b = sc.nextInt() ;
		System.out.println("a:"+a+",b:"+b);*/
		
		//录入两个String类型的数据
		//hasNextLine
		String a = sc.nextLine() ;
		String b = sc.nextLine() ;
		
		//先录入String类型的数据,在录入int类型的数据
		String a = sc.nextLine() ;
		int b = sc.nextInt() ;
		
		//先录入int类型,再录入String类型
		int a = sc.nextInt() ;
		//String b = sc.nextLine() ;
		String b = sc.next() ;
		
		int a = sc.nextInt() ;
		//创建键盘录入对象
		Scanner sc2 = new Scanner(System.in) ;
		String b = sc2.nextLine() ;
		
		
		
		System.out.println("a:"+a+",b:"+b);
	}
}

String类


  String类:
  代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现;字符串一旦被赋值,其值不能再改变
 
  String类常用的构造方法:
   String():表示一个空字符序列。
   public String(byte[] bytes,Charset ch):默认字符集(编码格式):GBK,如果是GBK格式,可以不写第二个参数
  public String(byte[] bytes,int index,int length):将部分字节数组构造成一个字符串
  public String(char[] value):将字符数组构造成一个字符串
   public String(char[] value,int index,int length):将部分的字符数组构造成一个字符串
public String(String original):通过字符串常量构造一个字符串对象
 
 
  *获取字符串的长度功能:
  public int length()
 
 面试题:
  数组中有没有length(), 字符串中有没有length(), 集合中有没有length()(集合后面讲)?
  数组没有length(),数组有length属性
  字符串中有length()
                        集合中没有length(),获取集合中元素数量:size()
 

package org.westos_10_string01;

import java.io.UnsupportedEncodingException;
import java.util.Arrays;


public class StringDemo {
	public static void main(String[] args) throws UnsupportedEncodingException {
		//创建一个String对象
		String s1 = new String(); 
		System.out.println("s1:"+s1); //s1:
		System.out.println("s1.length():"+s1.length());//s1.length():0
		System.out.println("---------------------");
		
		//public String(byte[] bytes,Charset ch):默认字符集(编码格式):GBK,如果是GBK格式,可以不写第二个参数
		//创建一个字节数组
		byte[] bys = {97, 98, 99, 100, 101} ;
		String s2 = new String(bys);
		System.out.println("s2:"+s2);//s2:abcde   字节的值要找它对应的ASCII码表中的字符
		
		System.out.println("s2.length():"+s2.length());//s2.length():5
		System.out.println("----------------------");
		/*编码和解码:一定要保证编码格式一致
		  	编码:
		  		把能看懂的东西转换成一个看不懂的东西:String----->byte[]:public byte[] getBytes(String charsetName)
		  	解码:
		  		把当前的byte[]转成能看懂的东西(String):byte[]----->String  :public String(byte[] bytes,CharsetName ch)*/
			//编码
		String s3 = "我在回忆里等你!";
		byte[] bys2 = s3.getBytes("GBK");//抛出异常 UnsupportedEncodingException
		
		System.out.println(bys2);//[B@70dea4e
		//Arrays:数组工具类:toString(byte[] bys)
		System.out.println(Arrays.toString(bys2));
		//-50, -46, -44, -38, -69, -40, -46, -28, -64, -17, -75, -56, -60, -29, -93, -95]
			//解码
		System.out.println("-------");
		String str = new String(bys2, "GBK") ;
		
		System.out.println("str:"+str);//str:我在回忆里等你!

			//public String(char[] value):将字符数组构造成一个字符串
				//定义一个字符数组
		char[] chs = {'我','在','回','忆','里','等','你'} ;
		String s4 = new String(chs) ;
		System.out.println("s4.length():"+s4.length()); //s4.length():7
		System.out.println("s4:"+s4); //s4:我在回忆里等你
				
		System.out.println("--------------------");
		String s5 = new String(chs, 1, 6) ;
		System.out.println("s5:"+s5);//s5:在回忆里等你
		System.out.println("s5.length():"+s5.length());//s5.length():6
				
		System.out.println("--------------------");
			//public String(String original):通过字符串常量构造一个字符串对象
		String s6 = new String("hello") ;//一般不使用
		System.out.println("s6:"+s6);//s6:hello
		System.out.println("s6.length():"+s6.length());//s6.length():5
				
				
		String s7 = "iloveyou" ;
		System.out.println("s7:"+s7);//s7:iloveyou
		
		System.out.println("s7.length():"+s7.length());//s7.length():8
				

	}
}//创建一个String对象
		String s1 = new String(); 
		System.out.println("s1:"+s1); //s1:
		System.out.println("s1.length():"+s1.length());//s1.length():0
		System.out.println("---------------------");
		
		//public String(byte[] bytes,Charset ch):默认字符集(编码格式):GBK,如果是GBK格式,可以不写第二个参数
		//创建一个字节数组
		byte[] bys = {97, 98, 99, 100, 101} ;
		String s2 = new String(bys);
		System.out.println("s2:"+s2);//s2:abcde   字节的值要找它对应的ASCII码表中的字符
		
		System.out.println("s2.length():"+s2.length());//s2.length():5
		System.out.println("----------------------");
		/*编码和解码:一定要保证编码格式一致
		  	编码:
		  		把能看懂的东西转换成一个看不懂的东西:String----->byte[]:public byte[] getBytes(String charsetName)
		  	解码:
		  		把当前的byte[]转成能看懂的东西(String):byte[]----->String  :public String(byte[] bytes,CharsetName ch)*/
			//编码
		String s3 = "我在回忆里等你!";
		byte[] bys2 = s3.getBytes("GBK");//抛出异常 UnsupportedEncodingException
		
		System.out.println(bys2);//[B@70dea4e
		//Arrays:数组工具类:toString(byte[] bys)
		System.out.println(Arrays.toString(bys2));
		//-50, -46, -44, -38, -69, -40, -46, -28, -64, -17, -75, -56, -60, -29, -93, -95]
			//解码
		System.out.println("-------");
		String str = new String(bys2, "GBK") ;
		
		System.out.println("str:"+str);//str:我在回忆里等你!

			//public String(char[] value):将字符数组构造成一个字符串
				//定义一个字符数组
		char[] chs = {'我','在','回','忆','里','等','你'} ;
		String s4 = new String(chs) ;
		System.out.println("s4.length():"+s4.length()); //s4.length():7
		System.out.println("s4:"+s4); //s4:我在回忆里等你
				
		System.out.println("--------------------");
		String s5 = new String(chs, 1, 6) ;
		System.out.println("s5:"+s5);//s5:在回忆里等你
		System.out.println("s5.length():"+s5.length());//s5.length():6
				
		System.out.println("--------------------");
			//public String(String original):通过字符串常量构造一个字符串对象
		String s6 = new String("hello") ;//一般不使用
		System.out.println("s6:"+s6);//s6:hello
		System.out.println("s6.length():"+s6.length());//s6.length():5
				
				
		String s7 = "iloveyou" ;
		System.out.println("s7:"+s7);//s7:iloveyou
		
		System.out.println("s7.length():"+s7.length());//s7.length():8
				

	}
}

字符串的一个特点:一旦被赋值,其值不能被改变(不可变的字符序列)
  
* 面试题:

  String s = "hello"
   和String s = new String("hello") 两个有什么区别?分别创建了几个对象
 
  第一个创建了一个对象

  第二个s创建两个对象(堆内存中有new String(),然后字符串常量池中也有这样一个字符串常量(开辟空间的地址))

String类的中常用的判断功能:
  boolean equals(Object obj): 当前该对象是否obj这个对象是否相等;
boolean equalsIgnoreCase(String str): 比较字符串是否相等,忽略大小写
boolean contains(String str): 判断str这个字符串是否包含在当前字符串中
boolean startsWith(String str): 是否以str子字符串开头
boolean endsWith(String str): 判断是否以str子字符串结尾
boolean isEmpty(): 判断字符串是否为空

String s = "" ;空字符
String s = " " ;字符串"空格"
String s = null ;当前字符串对象为空
 

public class StringDemo {
	
	public static void main(String[] args) {
		
		//定义一个字符串
		String s1 = "helloworld" ;
		String s2 = "HelloWorld" ;
		
		//boolean equals(Object obj):当前该对象是否obj这个对象是否相等;String重写equals(),比较的是两个字符串的内容是否相同
		System.out.println("equals:"+s1.equals(s2));
		//boolean equalsIgnoreCase(String str):比较字符串是否相等,忽略大小写
		System.out.println("equalsIgnoreCase:"+s1.equalsIgnoreCase(s2));
		
		//boolean contains(String str):判断str这个字符串是否包含在当前字符串中
		System.out.println("contains:"+s1.contains("owo"));
		System.out.println("contains:"+s1.contains("ak47"));
		
		//boolean startsWith(String str):是否以str子字符串开头
		System.out.println("starsWith:"+s1.startsWith("hel"));
		//boolean endsWith(String str):判断是否以str子字符串结尾  
		
		//boolean isEmpty():判断字符串是否为空
		System.out.println("isEmpty:"+s1.isEmpty());
	}
}
//定义一个字符串
		String s1 = "helloworld" ;
		String s2 = "HelloWorld" ;
		
		//boolean equals(Object obj):当前该对象是否obj这个对象是否相等;String重写equals(),比较的是两个字符串的内容是否相同
		System.out.println("equals:"+s1.equals(s2));
		//boolean equalsIgnoreCase(String str):比较字符串是否相等,忽略大小写
		System.out.println("equalsIgnoreCase:"+s1.equalsIgnoreCase(s2));
		
		//boolean contains(String str):判断str这个字符串是否包含在当前字符串中
		System.out.println("contains:"+s1.contains("owo"));
		System.out.println("contains:"+s1.contains("ak47"));
		
		//boolean startsWith(String str):是否以str子字符串开头
		System.out.println("starsWith:"+s1.startsWith("hel"));
		//boolean endsWith(String str):判断是否以str子字符串结尾  
		
		//boolean isEmpty():判断字符串是否为空
		System.out.println("isEmpty:"+s1.isEmpty());
	}
}

 String类的获取功能(重点):

int length() :获取字符串长度功能
char charAt(int index):返回的是索引处对应的字符
int indexOf(int ch):返回指定字符在此字符串中第一次出现处的索引

int indexOf(String str):返回指定子字符串在此字符串中第一次出现    的索引
int indexOf(int ch,int fromIndex):返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索。
int indexOf(String str,int fromIndex):返回在此字符串中第一次出现指定字符串处的索引,从指定的索引开始搜索

String substring(int start):从指定位置开始截取字符串,默认截取到末尾
String substring(int start,int end):从指定位置开始截取到指定位置结束,包前(start索引)不包后(end索引)

public class StringDemo {
	
	public static void main(String[] args) {
		//定义一个字符串:
		String str = "helloworld" ;
		
		//int length()	:获取字符串长度功能
		System.out.println("length:"+str.length());
		
		//char charAt(int index):返回的是索引处对应的字符
		System.out.println("charAt:"+str.charAt(1));
		System.out.println("charAt:"+str.charAt(8));
		System.out.println("-------------------------------");
		
		//int indexOf(int ch):返回指定字符在此字符串中第一次出现处的索引
		System.out.println("indexof:"+str.indexOf('l'));
		System.out.println("indexof:"+str.indexOf('k'));//-1
		
		//int indexOf(String str):返回指定子字符串在此字符串中第一次出现的索引
		System.out.println("indexOf:"+str.indexOf("owo"));
		System.out.println("-------------------------------");
		//int indexOf(int ch,int fromIndex):返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索。
		System.out.println("indexOf:"+str.indexOf('l', 4));
		
		//int indexOf(String str,int fromIndex):返回在此字符串中第一次出现指定字符串处的索引,从指定的索引开始搜索 
		
		//String substring(int start):从指定位置开始截取字符串,默认截取到末尾(返回一个新的字符串,不再是字符串本身!)
		System.out.println("substring:"+str.substring(5));
		
		//String substring(int start,int end):从指定位置开始截取到指定位置结束,包前(start索引)不包后(end索引)
		System.out.println("substring:"+str.substring(4, 8));//owor
	}
}
//定义一个字符串:
		String str = "helloworld" ;
		
		//int length()	:获取字符串长度功能
		System.out.println("length:"+str.length());
		
		//char charAt(int index):返回的是索引处对应的字符
		System.out.println("charAt:"+str.charAt(1));
		System.out.println("charAt:"+str.charAt(8));
		System.out.println("-------------------------------");
		
		//int indexOf(int ch):返回指定字符在此字符串中第一次出现处的索引
		System.out.println("indexof:"+str.indexOf('l'));
		System.out.println("indexof:"+str.indexOf('k'));//-1
		
		//int indexOf(String str):返回指定子字符串在此字符串中第一次出现的索引
		System.out.println("indexOf:"+str.indexOf("owo"));
		System.out.println("-------------------------------");
		//int indexOf(int ch,int fromIndex):返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索。
		System.out.println("indexOf:"+str.indexOf('l', 4));
		
		//int indexOf(String str,int fromIndex):返回在此字符串中第一次出现指定字符串处的索引,从指定的索引开始搜索 
		
		//String substring(int start):从指定位置开始截取字符串,默认截取到末尾(返回一个新的字符串,不再是字符串本身!)
		System.out.println("substring:"+str.substring(5));
		
		//String substring(int start,int end):从指定位置开始截取到指定位置结束,包前(start索引)不包后(end索引)
		System.out.println("substring:"+str.substring(4, 8));//owor
	}
}

 String类的转换功能(重点):


byte[] getBytes(): 将字符串转换字节数组
char[] toCharArray(): 将字符串转换成 字符数组 (开发中经常使用)
static String valueOf(char[] chs): 将字符数组转换成字符串
static String valueOf(int i): 将一个int类型的数据转换成字符串


注意:
String类中的valueOf()可以将任何数据类型转换成字符串

String toLowerCase(): 将字符串全部转成小写
String toUpperCase(): 将字符串全部转换成大写
String concat(String str): 字符串拼接方法

public class StringDemo {
	
	//构造方法:
	//构造方法不能使用递归
	/*public StringDemo(){
		StringDemo();
	}*/
	
	public static void main(String[] args) {
		//定义一个字符串
		String s = "JavaSE" ;
		
		//byte[] getBytes():将字符串转换字节数组
		byte[] bys = s.getBytes() ;
		//遍历字节数组
		for(int x = 0 ; x < bys.length ; x++){
			System.out.println(bys[x]);
		}
		System.out.println("---------------------");
		
		//char[] toCharArray():将字符串转换成 字符数组
		char[] chs = s.toCharArray() ;
		for (int x = 0; x < chs.length; x++) {
			System.out.println(chs[x]);
		}
		
		System.out.println("---------------------");
		
		//static String valueOf(char[] chs):将字符数组转换成字符串
		String s2 = String.valueOf(chs) ;
		System.out.println("s2:"+s2);
		
		//static String valueOf(int i):将一个int类型的数据转换成字符串
		String s3 = String.valueOf(100) ;
		System.out.println("s3:"+s3);
		
		//String toLowerCase():将字符串全部转成小写
		System.out.println("toLowerCase:"+s.toLowerCase());
		//String toUpperCase():将字符串全部转换成大写
		System.out.println("toUpperCase:"+s.toUpperCase());
		
		//String concat(String str):字符串拼接方法
		String s4 = "hello" ;
		String s5 = "world" ;
		System.out.println("contact:"+s4.concat(s5));
		
		String s6 = "java" ;
		s6 += "web" ;
		System.out.println("s6:"+s6);
		
		/**
		 *方法嵌套
		 * Math.max(Math.max(a,b),c);
		 * 
		 *方法递归:方法调用本身的一种现象
		 *
		 *		三个条件:
		 *			1)需要定义个方法
		 *			2)方法必须有出口条件
		 *			3)必须有某一种规律
		 * public void show(int n){
		 * 		
		 * 		if(n<0){
		 * 			System.exit(0) ; //让jvm退出,程序结束
		 * 		}
		 * 
		 * 		System.out.println(n) ;
		 * 		show(--n) ;
		 * }
		 * */
		System.out.println("--------------------");
		//需求:求5的阶乘
		//5! = 5 * 4 * 3 * 2 * 1 ;
		//5! = 5 * 4! ;
		int jc = 1 ;
		//循环思想
		for(int x = 2 ; x <=5 ; x ++){
			jc *= x;
		}
		System.out.println("5的阶乘是:"+jc);
		System.out.println("-------------------------");
		//使用递归的思想:
		//需要定义个方法
		System.out.println("5的阶乘是:"+jieCheng(5));
	}
	/**
	 * 明确返回值类型:
	 * 	int类型
	 * 参数类型:int类型的值
	 * 
	 * 2)出口条件:
	 * if(n==1){
	 * 	return 1 ;
	 * }
	 * 
	 * 3)要有规律
	 * 	if(n!=1){
	 * 		return n* 方法名(n-1);	
	 * }
	 * */
	public static int jieCheng(int n){
		
		if(n==1){
			return 1 ;
		}else{
			return n* jieCheng(n-1) ; //5 * 4 * 3 * 1 *1 
		}
	}
}
//构造方法:
	//构造方法不能使用递归
	/*public StringDemo(){
		StringDemo();
	}*/
	
	public static void main(String[] args) {
		//定义一个字符串
		String s = "JavaSE" ;
		
		//byte[] getBytes():将字符串转换字节数组
		byte[] bys = s.getBytes() ;
		//遍历字节数组
		for(int x = 0 ; x < bys.length ; x++){
			System.out.println(bys[x]);
		}
		System.out.println("---------------------");
		
		//char[] toCharArray():将字符串转换成 字符数组
		char[] chs = s.toCharArray() ;
		for (int x = 0; x < chs.length; x++) {
			System.out.println(chs[x]);
		}
		
		System.out.println("---------------------");
		
		//static String valueOf(char[] chs):将字符数组转换成字符串
		String s2 = String.valueOf(chs) ;
		System.out.println("s2:"+s2);
		
		//static String valueOf(int i):将一个int类型的数据转换成字符串
		String s3 = String.valueOf(100) ;
		System.out.println("s3:"+s3);
		
		//String toLowerCase():将字符串全部转成小写
		System.out.println("toLowerCase:"+s.toLowerCase());
		//String toUpperCase():将字符串全部转换成大写
		System.out.println("toUpperCase:"+s.toUpperCase());
		
		//String concat(String str):字符串拼接方法
		String s4 = "hello" ;
		String s5 = "world" ;
		System.out.println("contact:"+s4.concat(s5));
		
		String s6 = "java" ;
		s6 += "web" ;
		System.out.println("s6:"+s6);
		
		/**
		 *方法嵌套
		 * Math.max(Math.max(a,b),c);
		 * 
		 *方法递归:方法调用本身的一种现象
		 *
		 *		三个条件:
		 *			1)需要定义个方法
		 *			2)方法必须有出口条件
		 *			3)必须有某一种规律
		 * public void show(int n){
		 * 		
		 * 		if(n<0){
		 * 			System.exit(0) ; //让jvm退出,程序结束
		 * 		}
		 * 
		 * 		System.out.println(n) ;
		 * 		show(--n) ;
		 * }
		 * */
		System.out.println("--------------------");
		//需求:求5的阶乘
		//5! = 5 * 4 * 3 * 2 * 1 ;
		//5! = 5 * 4! ;
		int jc = 1 ;
		//循环思想
		for(int x = 2 ; x <=5 ; x ++){
			jc *= x;
		}
		System.out.println("5的阶乘是:"+jc);
		System.out.println("-------------------------");
		//使用递归的思想:
		//需要定义个方法
		System.out.println("5的阶乘是:"+jieCheng(5));
	}
	/**
	 * 明确返回值类型:
	 * 	int类型
	 * 参数类型:int类型的值
	 * 
	 * 2)出口条件:
	 * if(n==1){
	 * 	return 1 ;
	 * }
	 * 
	 * 3)要有规律
	 * 	if(n!=1){
	 * 		return n* 方法名(n-1);	
	 * }
	 * */
	public static int jieCheng(int n){
		
		if(n==1){
			return 1 ;
		}else{
			return n* jieCheng(n-1) ; //5 * 4 * 3 * 1 *1 
		}
	}
}

猜你喜欢

转载自blog.csdn.net/dreamer_96/article/details/78398791