您的位置:首页 > 其它

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

2015-09-13 22:55 337 查看

(一):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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: