以下是博主学java的时候记的一些笔记,分享给大家,如果有错误或者以为的话,可以在下方留言
StringBuffer类
StringBuffer对象的创建
String类创建的对象,创建之后不能修改,实体不在发生变化。
StringBuffer buffer = new StringBuffer(“我喜欢学习”);
StringBuffer类可以使用append方法追加字符序列。
(1)StirngBuffer() 分配给对象的实体的初始化容量为16个字符,长度大于16时,自动增加。
(2)StringBuffer(int size) 分配给对象的实体的初始化容量为size个,大于size时,自动增加。
(3)StringBuffer(String s) 分配给对象的实实体的初始化容量为s的长度另加16个,超出时自动增加。
注意:StringBuffer对象通过length()方法获取实体中存放的字符序列的长度,通过capacity()方法获取当前实体的实际容量。
例:
<span style="font-size:18px;">package com.Stringbuffer;
public class buffer {
/**
*
* 构造函数默认是创建16个单位的缓冲区,存放在内部数组里。
* 调用默认构造函数,缓冲区是16。直到你的字符的length超过16时,按照(初始大小+1)*2的算法增加。
* 16+1=17 17*2=34.由此而来。
*
* */
public static void main(String []args){
StringBuffer str=new StringBuffer();
str.append("大家好");
System.out.println("str:"+str);
System.out.println("length:"+str.length());
System.out.println("capacity:"+str.capacity());
str.append("大家都很愿意学习Java语言"); //通过自己的测试(不确保正确性),当StringBuffer中没有输入东西的时候,
System.out.println("str:"+str); //capacity初始值仅为16,当String长度超过16并少于34时,capacity为34,
System.out.println("length:"+str.length()); //当超过34时,capacity的值即为当前字符串的长度值
System.out.println("capacity:"+str.capacity());
StringBuffer st=new StringBuffer("Hello");
System.out.println("length:"+st.length());
System.out.println("capacity:"+st.capacity());
}
}</span>
答案:
<span style="font-size:18px;"> str:大家好
length:3
capacity:16
str:大家好大家都很愿意学习Java语言
length:17
capacity:34
length:5
capacity:21</span>
StringBuffer类的常用方法
(1)StringBuffer append(String s) 将一个字符串对象追加在字符串之后,再追加到StringBuffer对象中,并返回当前StringBuffer对象的引用。
(2)StringBuffer append(int n) 将一个int型数据转化为字符串对象后再追加到StringBuffer对象中,并返回当前StringBuffer对象的引用。
类似的方法还有StringBuffer append(Object o),
StringBuffer append(long l),StringBuffer append(boolean l),
StringBuffer append(float n),StringBuffer append(double n),
StringBuffer append(char b)。
(1)public char charAt(int n) 得到参数n指定的位置上的单个字符。n的值必须是非负数的,并且小于当前对象实体中字符序列的长度。
(2)public void setCharAt(int n,char ch) 将当前字符串的位置n处的字符用ch字符替换,n的值也必须是非负的,且小于当前字符串的长度。
(3)StringBuffer insert(int index,String str) 将字符串str插入到当前字符串的index位置处,并返回对象的引用。
(4)public StringBuffer reverse() 将当前字符串翻转,并返回当前字符的引用。
(5)StringBuffer delete(int start,int end) 将当前字符串从第start到第end-1个字符删除,并返回当前对象的引用。
(6)StringBUffer deleteCharAt(int index) 删除当前字符串中index处的单个字符
(7)StringBuffer replace(int start,int end,String str) 将当前字符串从start位置到end-1位置用字符串str代替,并返回当前对象的引用。
StringTokenizer类
(1)StringTolenizer(String s) 为字符串s建立一个分析器。使用默认的分隔标记,即空格符(若干个被看做是一个空格),换行符,回车符,Tab符,进纸符。
(2)StringTolenizer(String s,String sel) 为字符串s建立一个分析器。使用sel中的任意字符的组合作为分隔标记。
例:
<span style="font-size:18px;">package com.StringQita;
import java.util.StringTokenizer;
public class Stringqita {
public static void main(String []args){
StringBuffer str=new StringBuffer();
str.append("你好,萨瓦迪卡!");
System.out.println(str);
str.setCharAt(2,'5');
System.out.println(str);
str.insert(2, "df");
System.out.println(str);
str.reverse();
System.out.println(str);
str.reverse();
str.delete(2, 5);
System.out.println(str);
str.setCharAt(2,',');
System.out.println(str);
str.deleteCharAt(2);
System.out.println(str);
str.replace(2,5,",帅哥");
System.out.println(str);
StringBuffer str1=new StringBuffer("he likes Java");
str1.setCharAt(0, 'w');
str1.setCharAt(1, 'e');
System.out.println(str1);
String str2=new String("we are family");
String str3[]=str2.split(" ");
for(String s:str3){
System.out.println(s);
}
String s="we are stud,ents";
StringTokenizer fenxi=new StringTokenizer(s," ,");
int k=fenxi.countTokens(); //得到分析器中计数变量的值
System.out.println(k);
String se=fenxi.nextToken();
System.out.println(se);
k=fenxi.countTokens(); //经过fenxi.nextToken()方法,使得计数器减一,所以k的值为4-1=3
System.out.println(k);
System.out.println(fenxi.hasMoreTokens());
while(fenxi.hasMoreTokens()){ //只要分析器中还有语言符号为正
String sre=fenxi.nextToken();
System.out.println(sre);
System.out.println(fenxi.countTokens());
}
}
}</span>
答案:
<span style="font-size:18px;">你好,萨瓦迪卡!
你好5萨瓦迪卡!
你好df5萨瓦迪卡!
!卡迪瓦萨5fd好你
你好萨瓦迪卡!
你好,瓦迪卡!
你好瓦迪卡!
你好,帅哥!
we likes Java
we
are
family
4
we
3
true
are
2
stud
1
ents
0
</span>
Scanner类
也可以使用Scanner类来解析字符串中的单词.
String s = “ijkjhgk4562fkduio754.,lk42”;
Scanner scanner = new Scanner(s);
那么Scanner 默认使用空格作为分隔标记来解析字符串的单词,也可以用Scanner对象的useBelimiter(正则表达式);将正则表达式作为分隔标记。
(1)scanner调用next()方法依次返回被解析的字符串s中的单词,如果s的最后一个单词已被next()方法返回,scanner调用hasNext()将返回false,否则返回true。
个人理解:当分隔后的字符串还有单词时,hasNext()将会返回true,否则返回false。
(2)对于被解析的字符串s中的数字型的单词,scanner可以用nextInt()或nextDouble()方法将数字型单词转化为int或double型数据返回。
(3)如果单词不是数字型单词,scanner调用nextInt()方法或nextDouble方法将会发生InputMismatchException异常,在处理异常时可以调用next()方法返回非数字化单词。
例:
<span style="font-size:18px;"><span style="color:#000000;">package com.Scannern;
import java.util.InputMismatchException;
import java.util.Scanner;
public class Scannerr {
public static void main(String []args){
String str = "nishizhu124./,45wlkj24";
Scanner scanner = new Scanner(str);
String regex = "[^0-9.]+"; //除了数字和.的任意多个字符
scanner.useDelimiter(regex); //用正则表达式解析字符串
double x = 0;
while(scanner.hasNext()){ //判断是否还有单词
try{
double c=scanner.nextDouble(); //返回数字型单词的值
x+=c;
System.out.println(c);
}
catch(InputMismatchException e){ //异常处理
String t = scanner.next();
}
}
System.out.println(x);
}
}</span></span>
答案:
<span style="font-size:18px;">124.0
45.0
24.0
193.0</span>