常用API(String类和Scanner类个人学习体会)

(一):Scannerl类

在常用的API中Sanner类是一个比较常见且使用频率较为高的一个类,所以我在学习的过程中也有自己的笔记,在这里我在把他们分享给你们,个人学习理解体会不喜勿喷.

(1)类概述

A:构造方法
Scanner(InputStream source)
B:常用的方法
1),hasNextXxx();判断是不是还有下一个输入项,其中Xxx可以使int Double类型的,在这里如果判断的是否包涵下个字符串,可以直接使用hasNext().
nextXxx()   获取的是下一个输入项.

在这里我想说的是 Scanner获取数据会出现的一个问题 ,我相信不管是现在学习java和从事开发工作的朋友们都会遇到的一个问题,虽然问题不大,但是作为开发人员应该养成处理问题,用最好的方法来实现和解决问题的能力.条条大路通罗马但是我要选择最效率的那一条.
 那么具体的问题是什么,请看下面的分析和代码.

   (2)常用的方法有以下

public  int nextInt(); 获取一个int类型的值
public String nextLine(); 获取一个String类型的值

(1):我先演示用nextInt打印多个int类型的值代码如下
Scanner sc = new Scanner(System.in);
		System.out.println("请输入第一个整数:");
		int i = sc.nextInt();
		System.out.println("请输入第二个整数:");
		int j = sc.nextInt();
		System.out.println("i = " + i + ", j = " + j);


输入的和输出的值正常答应出来
       我就不演示打印多个String类型的字符串了,
我直接演示先打印int类型的值,然后在获取String的值,为了方便观察问题,我会在代码中添加多条语句来实现打印便于观察的输出语句...具体代码如下
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个整数:");
		int i = sc.nextInt();
		System.out.println("请输入第二个字符串:");
		String line2 = sc.nextLine();
		//System.out.println("i = " + i + ", line2 = " + line2);
		System.out.println(i);
		System.out.print("11111111111");
		System.out.print(line2);
		System.out.println("2222222222222");


当你输入第一个数时候,直接打印出如下的答案
请输入第一个整数:
1
请输入第二个字符串:
1
111111111112222222222222
为什么输入第一个数字1,的时候把第二条语句也执行了?
那是因为,nextInt()是键盘录入整数的方法,当我们录入10的时候,其实键盘上录入的
是10和\r\n , nextInt()方法只录入10就结束了,所以当执行到 nextLine的时候,可以接受任意类型的而且\r\n也表示一行的结束,所以才有如上代码问题的输出.
那么怎么去解决呢?
这里我提供两个解决的方法
1,直接创建两次对象,但是对于我们开发人员来说资源很宝贵所以建议忽略这个方法.
2,这个是我简易实用的,只要是键盘录入的都是字符串,所以建议就使用nextLine()方法,避免如上问题的出现.
下面提供我修改之后的代码.
<span style="font-size:18px;">int i = sc.nextInt();
Scanner sc2 = new Scanner(System.in);
String line = sc2.nextLine();
System.out.println(i);
System.out.println(line);</span>

(二):String类(重点啊)

个人觉得一个开发人员的个人开发素养高低直接取决于他对于API像String类和集合的应用熟练程度.而不是要用的时候去查阅API那样太LOW了.所以说这个真的很重要.个人观点不喜勿喷.

(1)String类常见的构造函数

public String(); 无参构造

public String(byte[] bytes); 把字节数组转化成字符串
public String(byte[] bytes,int index,int length):把字节数组的一部分转成字符串

 public String(char[] value):把字符数组转成字符串

 public String(char[] value,int index,int count):把字符数组的一部分转成字符串

public String(String original):把字符串常量值转成字符串

下面列出个别构造函数的具体事例(只写重要代码)
这个就是    public String (byte[] bytes);
String s1 = new String();
System.out.println(s1);
byte[] arr1 = {97,98,99};		
String s2 = new String(arr1);		
System.out.println(s2);

(2):String常见方法(列举的都是要记住的)

String类适用于描述字符串事物那么他又有那些常用的方法呢?具体如下

1,获取  
非常重要
1.1,字符串中包含的字符数,也就是字符串的长度。

int length();(获取长度)数组也有长度但是它没有括号因为是属性,
字符串有长度但是他是通过方法完成的。

1.2,根据位置index获取该位置上具体的字符。
char charAt(int index):

1.3,根据字符获取该字符串中的位置。
int indexOf(int ch):返回的是指定字符在此字符串中第一次出现的位置。

int indexOf(int ch,int fromIndex):从fromIndex指定的位置开始,
获取此字符串在字符串中出现的位置。

int indexOf(String str):返回的是Str在字符串中第一次出现的位置。

int indexOf(String str,int fromIndex):从fromIndex指定的位置开始,
获取Str在字符串中出现的位置。


int lastIndexOf(int ch)  返回指定的字符在这个字符串中最后一次出现的位置的索引

int lastIndexOf(int ch,int fromIndex)返回指定的字符在这个字符串中
最后一次出现的位置的索引,且是从指定的索引中开始反向索引.

int lassindexOf(String str):返回的是指定字符串在字符串中最右边出现处的索引

int lassindexOf(String str,int fromIndex):返回的是指定字符串在字符串中
最后一次出现初的索引,从指定的索引出反向开始索引.


2,判断
//返回的是布尔类型的
  必须掌握!!

2.1,字符串中是否包含某一个子串.
boolean contains(str);
特殊之处: indexOf(str);索引出str第一次出现的位置,如果返回的是-1,说明str字符不存在
索引,也可以用作与   对指定判断是否包含.
if(str.indexOf("adsg")!=-1)
说明有该方法,且可以获取返回的位置.

2.2,字符串中是否有内容.
boolean isEmpty() //判断长度是否为0,当且仅当length()为0时返回ture

2.3,字符串是否是以指定内容开头.
boolean startsWith(str);

2.4,字符串是否是以指定内容结尾.
boolean endsWith(str);

2.5,判断字符串的内容是否相同,复写了object类中的equals方法.
boolean equals(str);

2.6,判断内容是否相同,并忽略大小写.
boolean equalsIgnoreCase();

3,转换.
3.1,将字符数组,转成字符串.
构造函:String(char[]); 将数组全部转换成字符串.
String(char[],offset,count);将数组中的一部分转成字符串.

静态的方法:static String copyValueOf(char[]);
static String copyValueOf(char[] date,int offset,int count)
static String valueOf(char);

**3.2,将字符串,转成字符数组(返回char类型数组).
chat[] toCharArray();

3.3,将字节转换成字符串.
String(byte[]); 将字节全部转换成字符串.

String(byte[],offset,count);将字节中的一部分转成字符串.

3.4,将字符串,转成字节数组.

byte[] getBytes();
特殊:字符串和字节数组在转换过程中,是可以指定编码表的.

3.5,将基本数据类型转成字符串.
static String valueOf(int);
static String valueOf(double);
3+""; ==>String.valueOf(3);  都一样.


4,替换.
String replace(oldchar,newchar);

5,切割.
String[] split(regex);   (切割很特别,头和尾部不一样中间也是,这里不详细的解释了)

6,子串.// 获取字符串中的一部分
String substring(begin);  //从begin到结尾处
String substring(begin,end);//从begin到end 不包括end.

7,转换.去除空格,比较
将字符串转成大写或者小写
String toUpperCase();
String toLowerCase();
将字符串两端的多个空格去除
String trim();
对两个字符串进行自然顺序的比较
int compareTo(String);
对两个字符串连接起来
 1,  直接使用+
 2,使用concat();方法

下面是我具体的代码演示的个别方法
class  StringMethodDemo{
	public static void method_7(){
		String s = "  sADH  djgFG  ";
		sop(s.toUpperCase());
		sop(s.toLowerCase());
		sop(s.trim());

	}
	public static void method_sub(){
		String s = "sahdfiog";
		sop(s.substring(3));
		sop(s.substring(3,5));
	}
	public static void method_split(){
		String s = "zhagnsan, lisi,wangwu,liuqi";
		String[] arr = s.split(",");
		for(int x = 0;x<arr.length;x++){
			sop(arr[x]);

		}
	}
	public static void method_replace(){
		String s = "hello java";
		String s1 = s.replace('a','n');
		sop("s="+s);
		sop("s1="+s1);
	}
	public static void method_trans(){
		char[] arr = {'a','b','c','d','e','f','g'};
		String s = new String(arr);
		sop("s="+s);

		String s1 = "asdifighaog";
		char[] chs = s1.toCharArray();
		for(int x = 0; x<chs.length;x++){
			sop("ch="+chs[x]);
		}

	}
	
	public static void method_is(){
	
		
		String str ="ArrayDemo.java";
		//三个判断分别是判断开头结尾和子串
		sop(str.startsWith("Array"));
		sop(str.endsWith(".java"));
		sop(str.contains("Demo"));
		}

	public static void method_get(){
		String str = "abcdefabc";
		//获取长度
		sop(str.length());

		//根据索引获取字符。
		sop(str.charAt(3));//当访问到字符串不存在的时候,会出现字符串角标异常
		//根据字符获取索引
		sop(str.indexOf('a',3));//如果没有找到返回的是  -1  角标。
			//3表示从三号角标开始索引第一次出现A的位置。
		//反向索取一个字符串出现的位置
		sop(str.lastIndexOf("a"));
		//输出的是5,角标位置不会改变.
	}

	public static void main(String[] args) {
		//method_get();
		//method_is();
		//method_trans();
		//method_replace();
		//method_split();
		//method_sub();
		method_7();
	}

	public static void sop(Object obj){
		System.out.println(obj);
	}
}


你可能感兴趣的:(常用API(String类和Scanner类个人学习体会))