【java】String类和StringBuffer类常用操作
【java】String类和StringBuffer类常⽤操作
String类是字符串常量,是不可更改的常量。⽽StringBuffer是字符串变量,它的对象是可以扩充和修改的。StringBuffer在进⾏字符串处理时,不⽣成新的对象,在内存使⽤上要优于String类。所以在实际使⽤时,如果经常需要对⼀个字符串进⾏修改,例如插⼊、删除等操作,使⽤StringBuffer要更加适合⼀些。
String类主要⽅法的使⽤⼀、创建并初始化字符串:
String s = "hello!"; //使⽤字符串常量直接初始化 String(); //使⽤构造⽅法创建并初始化,初始化⼀个对象,表⽰空字符序列 String(value); //利⽤已存在的字符串常量创建⼀个新的对象String (char[] value); //利⽤⼀个字符数组创建⼀个字符串String(char[] value,int offset,int count);//截取字符数组offset到count的字符创建⼀个⾮空串String(StringBuffer buffer); //利⽤StringBuffer对象初始化String对象
⼆、String类主要⽅法的使⽤:
1、获取长度
*.length(); //这与数组中的获取长度不同,*.length;2、⽐较字符串
(1)equals() //判断内容是否相同(2)compareTo() //判断字符串的⼤⼩关系(3)compareToIgnoreCase(String int) //在⽐较时忽略字母⼤⼩写(4)== //判断内容与地址是否相同(5)equalsIgnoreCase() //忽略⼤⼩写的情况下判断内容是否相同//如果想对字符串中的部分内容是否相同进⾏⽐较,可以⽤(6)reagionMatches() //有两种 public boolean regionMatches(int toffset, String other,int ooffset,int len);表⽰如果String对象的⼀个⼦字符串与参数other的⼀个⼦字符串是相同的字符序列,则为true.要⽐较的String 对象的字符串从索引toffset开始,othpublic boolean reagionMatches(boolean ignoreCase,int toffset,String other,int ooffset,int len);//⽤布尔类型的参数指明两个字符串的⽐较是否对⼤⼩写敏感。
三、查找字符串中某个位置的字符
public char charAt(int index); //返回指定索引index位置上的字符,索引范围从0开始
四、查找指定字符串在字符串中第⼀次或最后⼀词出现的位置 在String类中提供了两种查找指定位置的字符串第⼀次出现的位置的⽅法
(1)public int indexOf(String str); //从字符串开始检索str,并返回第⼀次出现的位置,未出现返回-1(2)public int indexOf(String str,int fromIndex); //从字符串的第fromIndex个字符开始检索str
查找最后⼀次出现的位置有两种⽅法
(1)public int lastIndexOf(String str);(2)public int lastIndexOf(String str,int fromIndex);
如果不关⼼字符串的确切位置则可使⽤
public boolean contains(CharSequence s);
五、检查字符串的起始字符和结束字符
开始的字符串两种⽅法
(1)public boolean starWith(String prefix,int toffset);//如果参数prefix表⽰的字符串序列是该对象从索引toffset处开始的⼦字符串,则返回true(2)public boolean starWith(String prefix);
结束的字符串⽅法
public boolean endsWith(String suffix);
六、截取⼦串
(1)public String subString(int beginIndex);(2)public String subString(int beginIndex, int endIndex);//返回的字符串是从beginIndex开始到endIndex-1的串
要返回后4位可以这样写
Syetem.out.println(*.subString()(*.length()-4));
七、字符串的替换
两种⽅法
(1)public String replace(char oldChar,char newChar);(2)public String replace(CharSequence target,CharSequence replacement);//把原来的etarget⼦序列替换为replacement序列,返回新串(3)public String replaceAll(String regex,String replacement); //⽤正则表达式实现对字符串的匹配
⼋、字符串的⼤⼩写替转换
(1)public String toLowerCase(Locale locale);(2)public String toLowerCase();(3)public String toupperCase(Locale locale);(4)public String toUpperCase();
九、去除字符串⾸尾空格
*.trim();
⼗、字符串转换
1、将字符串转换成字符数组
public char[] toCharArray();2、将字符串转换成字符串数组
public String[] split(String regex);//regex 是给定的匹配3、将其它数据类型转化为字符串
(1)public static String valueOf(boolean b);(2)public static String valueOf(char c);(3)public static String valueOf(int i);(4)public static String valueOf(long i);(5)public static String valueOf(float f);(6)public static String valueOf(double d);(7)public static String valueOf(char[] data);(8)public static String valueOf(Object obj);
StringBuffer类主要⽅法的使⽤
⼀、可变字符串的创建和初始化
两种⽅法:
public StringBuffer();public StringBuffer(int caoacity);
⼆、获取可变字符串长度
public int length();public int capacity();public void setLength(int newLength);
三、⽐较可变字符串
⽤String 类的equals()⽅法⽐较,但是不同。类Object中的equals()⽅法⽐较的是两个对象的地址是否相等,⽽不仅仅是⽐较内容,但是
String类在继承Object类的时候重写了equals()⽅法,只是⽐较两个对象的内容是否相等StringBuffer类中没有重写Object类的equals()⽅法,所以⽐较的是地址和内容。
四、追加和插⼊字符串
public StringBuffer append(type t);//追加public StringBuffer insert(int offset,type t);//插⼊,在offset处加⼊类型为type的字符串
五、反转和删除字符串
public StringBuffer reverse(); //反转 public StringBuffer delete(int start,int end); //删除
六、减少⽤于可变字符序列的存储空间
public void trimToSize();
七、StringBuffer类转换成String类
public String toString();
java String 类的replace 和replaceAll 方法替换“?”号
这两个 方法确实简单,我们也知道他们就是用来进行字符和字符串的替换的,但是还是注意:
replace(char oldChar, char newChar)
返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
replaceAll(String regex,String replacement)
使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
注意一个匹配的字符串,一个是正则表达式匹配的字符串所以他们是有区别的,尤其是对于一些特殊字符。
这个特殊字符就有 “?” 这个特殊字符,因为在正则表达式中他确实有特殊意义所以在使用replaceAll() 方法的时候要注意:
1. String a="12345?6789";
2. String b=a.replace("?", "a");
3. // 这里的[?] 才表示字符问号,这样才能正常替换。不然在正则中会有特殊的意义就会报异常
4. String c=a.replaceAll("[?]", "a");
5. System.out.println(b);
6. System.out.println(c);
7.
8. 也就是如果要在正则表达式中使用“?”则应该使用[?] 而不应该是 ? 因为?在正则表达式中有特殊意义。
StringBuffer类的常用方法
StringBuffer类的常⽤⽅法
⼀、创建StringBuffer类
1.
StringBuffer 是线程安全 ( 耗费资源) 的 可变序列
StringBuilder 是 线程不安全(不耗费资源)的 可变序列
2.
创建⼀个新的StringBuffer对象⼀定要⽤到new⽅法,不能和string⼀样直接引⽤字符串常量
1 private static void fun1() {
2 // 构造⽅法初始化StringBuffer
3 StringBuffer sb = new StringBuffer();
4 // 打印当前的容量(理论值)
5 System.out.println(sb.capacity());// 16
6 // 打印长度(实际值)
7 System.out.println(sb.length());// 0
8 // 打印内容
9 System.out.println(sb.toString());
3.1 添加 append():
append(可以添加多种类型 包括基本数据类型);
例如:String、int、double、Boolean等,都可以转变成字符串表⽰形式。
1 private static void fun1() {
2 // StringBufferr 的长度是可以变的
3 // 对StringBufferr操作的时候 改变的是其本⾝
4 StringBuffer sb1 = new StringBuffer();
5 System.out.println(sb1);
6
7 sb1.append("wukong").append("z").append("n");
8 sb1.append("z");
9 sb1.append("n");
10
11 System.out.println(sb1);
3.2 插⼊insert():
setCharAt(int index , char ch)⽅法
Java中String,StringBuffer,StringTokenizer类介绍
Java中StringString,,StringBufferStringBuffer,,StringTokenizer类
String类:
ng.String类,不属于8种基本数据类型,String是一个对象,表示字符串常量。
因为对象的默认值是null,所以String的默认值也是null,但它又是一种特殊的对象,有其他对象没有的特性。
newString()和newString("")都是声明一个新的空字符串,是空串不是null。区别:空串是
经过new运算符分配了内存,即实际存在了(定义了)。而null则没有(只声明),调用null的
字符串的方法会抛出空指针异常。
从根本上认识ng.String类和String池。
1、String类是final的,不可被继承。publicfinalclassString。
2、String类的本质是字符数组char[],并且其值不可改变。privatefinalcharvalue[];
3、String类对象有个特殊的创建方式,如Stringx="abc";"abc"就表示一个字符串对象,
而x是"abc"对象的地址,叫做"abc"引用。4、Java运行时会维护一个Stringpool(String池),String池中的字符串内容不可重复,而
一般对象(非String类)不存在这个缓冲池,并且创建的对象仅仅用于方法的堆栈区。
5、创建字符串的方式归纳起来有三种:
<1>、使用new关键字创建字符串,Strings=newString("abc");
<2>、直接指定,Strings="abc";<3>、使用串联生成新的字符串,Strings="ab"+"c";
String对象的创建:
1、当使用任何方式来创建一个字符串对象s时,JVM会拿这个s在String池中找是否存
在内容相同的字符串对象。如果不存在,则在池中创建一个字符串s,否则,不在池中添加。
2、Java中,只要使用new关键字类创建对象,则一定会(在堆区或栈区)创建一个新对象。
【安全开发】java安全编码规范
【安全开发】java安全编码规范
申明:本⽂⾮笔者原创,原⽂转载⾃:https:///SecurityPaper/SecurityPaper-
web/blob/master/_posts/2.SDL%E8%A7%84%E8%8C%83%E6%96%87%E6%A1%A3/2018-08-17-SDL-3-
java%E5%AE%89%E5%85%A8%E7%BC%96%E7%A0%81%E8%A7%84%E8%8C%83.md
1输⼊验证和数据合法性校验
程序接受数据可能来源于未经验证的⽤户,⽹络连接和其他不受信任的来源,如果未对程序接受数据进⾏校验,则可能会引发安全问题。
1.1避免SQL注⼊
使⽤PreparedStatement预编译SQL,解决SQL注⼊问题,传递给PreparedStatement对象的参数可以被强制进⾏类型转换,确保在插⼊或查
询数据时与底层的数据库格式匹配。
String sqlString = "select * from db_user where username=? and password=?";
PreparedStatement stmt = connection.prepareStatement(sqlString);
stmt.setString(1, username);
stmt.setString(2, pwd);
ResultSet rs = stmt.executeQuery();
1.2避免XML注⼊
通过StringBulider 或 StringBuffer 拼接XML⽂件时,需对输⼊数据进⾏合法性校验。 对数量quantity 进⾏合法性校验,控制只能传⼊0-9的
数字:
if (!Pattern.matches("[0-9]+", quantity)) {
// Format violation
}
String xmlString = "\nWidget\n" +
Java基础第5章编程题答案
第五章编程题
1.编写一个程序,实现字符串大小写的转换并倒序输出。要求如下:
(1)使用for循环将字符串“HelloWorld”从最后一个字符开始遍历。
(2)遍历的当前字符如果是大写字符,就使用toLowerCase()方法将其转换为小写字符,反之则使用toUpperCase()方法将其转换为大写字符。
(3)定义一个StringBuffer对象,调用append()方法依次添加遍历的字符,最后调用StringBuffer对象的toString()方法,并将得到的结果输出。
【参考答案】
public class Chap5e {
public static void main(String[] args) {
String str="Hell5oWorld";
char[] ch=str.toCharArray();
StringBuffer s=new StringBuffer();
for(int i=ch.length-1;i>=0;i--)
{
if(ch[i]>='A'&&ch[i]<='Z')
s.append(String.valueOf(ch[i]).toLowerCase());
else
if(ch[i]>='a'&&ch[i]<='z')
s.append(String.valueOf(ch[i]).toUpperCase());
else
s.append(String.valueOf(ch[i]));
}
System.out.print(s.toString());
}
}
2. 利用Random类来产生5个20`30之间的随机整数并输出。
【参考答案】
import java.util.Random;
public class Chap5e {
public static void main(String[] args) {
往年Java面试题大全
1 / 28
往年Java面试题大全
一、基础篇
1、Java创建对象有几种方式?
【仅供参考】
Java创建对象有以下几种方式:
用new语句创建对象。
使用反射,使用Class.newInstance()创建对象。
调用对象的clone()方法。
运用反序列化手段,调用java.io.ObjectInputStream对象的readObject()方法。
2、构造器是否可被 重写?
【仅供参考】
Constructor 不能被 override(重写),但是可以 overload(重载),所以你可以看到⼀个类中有多个构造函数的情况。
3、Java 中的 Math. round(-1. 5) 等于多少?
【仅供参考】
等于 -1,因为在数轴上取值时,中间值(0.5)向右取整,所以正 0.5 是往上取整,负 0.5 是直接舍弃。
4、Java 中操作字符串都有哪些类?它们之间有什么区别?
【仅供参考】
操作字符串的类有:String、StringBuffer、StringBuilder。
String 和 StringBuffer、StringBuilder 的区别在于 String 声明的是不可变的对象,每次操作都会生成新的 String 对象,然后将指针指向新的 String
对象,而 StringBuffer、StringBuilder 可以在原有对象的基础上进行操作,所以在经常改变字符串内容的情况下最好不要使用 String。
StringBuffer 和 StringBuilder 最大的区别在于,StringBuffer 是线程安全的,而 StringBuilder 是非线程安全的,但 StringBuilder 的性能却高于
StringBuffer,所以在单线程环境下推荐使用 StringBuilder,多线程环境下推荐使用 StringBuffer。 2 / 28
《Java基础案例教程》_章节习题册 (1)
第1章 Java开发入门
习题
一、 填空题
1. 将.java源文件编译为.class文件的是【javac】命令。
2. 在Eclipse窗口中选择菜单【File】→New→Java Project创建Java项目。
3. 在安装JDK的过程中,有三个功能模块可供选择,它们分别是【开发工具】,【源代码】和【公共JRE】。
4. 将Hello.java文件编译为class文件,需要键入【javac Hello.java】命令。
5. JRE是Java程序的【运行环境】。
二、 判断题
1. Eclipse只是一个框架和一组服务,所有功能都是将插件组件加入到Eclipse框架中来实现的。(对)
2. JDK安装成功后,需要将bin目录的路径配置在环境变量path中。(对)
3. Java配置环境变量path的目的是为了可以查找到.class文件。(错)
4. JDK安装成功后,classpath环境变量必须配置。(错)
5. 在命令行窗口中,编译Demo.java文件可以输入javac Demo。(错)
三、 选择题
1. 如果jdk的安装路径为:c:\jdk,若想在命令窗口中任何当前路径下,都可以直接使用javac和java命令,需要将环境变量path设置为以下哪个选项(B)
A: c:\jdk
B: c:\jdk\bin
C: c:\jre\bin
D: c:\jre
2. 下列关于classpath环境变量的说法中,说法正确的是(C)
A: classpath配置一次后可永久使用
B: 没有classpath环境变量就不能运行Java程序
C: classpath环境变量可以让虚拟机找到class文件的目录
D: 查看当前classpath配置的命令是:classpath
3. 下面哪种类型的文件可以在Java虚拟机中运行(D)
A: .java
B: .jre
C: .exe
D: .class
Java试题--选择
Java 选择题
(11)下列哪个类是由编译器自动生成对象的特殊类,是用于类操作?B
A)System类
B)Class类
C)Thread类
D)Object类
(12)在Java源文件中什么类最多只能有一个,其他类的个数不限?A
A)public
B)private
C)protected
D)没有这种类
(13)下列哪个选项是short型数据的取值范围? B
A)-128 ~ +127
B)-32768~ +32767
C)-2147483648~ +2417483647
D)-3.40282347E38 ~ +3.40282347E38
(14)下列哪项是将一个十六进制值赋值给一个long型变量? D
A)long number = 123L;
B)long number = 0123;
C)long number = 0123L;
D)long number = 0x123L;
(15)下列程序段执行后的输出结果为 B
int x=3; int y=10;
System.out.println(y%x);
A)0
B)1 C)2
D)3
(16)下列的哪个程序段可能导致错误? B
A)String s = " hello";
String t = " good ";
String k = s + t;
B)String s = " hello";
String t;
t = s[3] + "one";
C)String s = " hello";
String standard = s.toUpperCase();
D)String s = "hello";
String t = s + "good";
java中length和length的区别
java中length和length的区别
java中length和length()的区别
泉水,奋斗之路越曲折,心灵越纯洁。以下是店铺为大家搜索整理的java中length和length()的区别的相关内容,希望能给大家带来帮助!
length是属性,一般集合类对象拥有的属性,取得集合的大小。
例如:数组.length就是取得数组的长度。
length()是方法,一般字符串类对象有该方法,也是取得字符串长度。 例如:字符串.length();
java中的length属性和length()方法和size()方法的区别
1.java中的length属性是针对数组说的,比如说你声明了一个数组,想知道这个数组的长度则用到了length这个属性.
2.java中的length()方法是针对字符串String说的,如果想看这个字符串的长度则用到length()这个方法.
3.java中的'size()方法是针对泛型集合说的,如果想看这个泛型有多少个元素,就调用此方法来查看!
这个例子来演示这两个方法和一个属性的用法
public static void main(String[] args) {
String []list={"ma","cao","yuan"};
String a="macaoyuan";
System.out.println(list.length);
System.out.println(a.length());
List
String s1 = "hello";
StringBuffer s2 = new StringBuffer(s1);
s2.append(" world");
System.out.println(s2.toString());
System.out.println(s2);
最后两句都是输出hello world,toString()方法到底有什么作用? 不是“许多对象都有这个方法”,而是“所有对象都有这个方法”,因为它是Object里面已经有了的方法,而所有类都是继承Object,所以“所有对象都有这个方法”
Java基础入门_课后题答案_仅供参考
黑马面试题
1:定义map集合,并自定义对象,对map集合遍历,打出key和value值 【已完成】
2:定义一个类A,类中定义一个show方法,打印一句话,在定义一个TestA类,利用反射在TestA中创建A的对象,并调用show方法
3:使用高效字符缓冲流复制文件
4:把C盘中的一个多层文件夹拷贝到D盘中。用高效的方法(要求写思路,注释,代码)
5:Integer泛型Map中存储字符串
6:开启两个线程每隔一段时间分别向一个共享数组中添加元素,每个线程添加3个即可。
7:Map的两种遍历方式 【已完成】
8:如何用反射去创建一个对象,有2种方式,尽量用代码去体现
9:编写一个程序,把这个目录里边的所有的带.java文件都拷贝到另一个目录里边,拷贝成功以后,把后缀名是.java改成.txt
10:创建多线程的方式有几种?尽量用代码去体现
11:编写一个类,在main方法中定义一个Map对象(采用泛型),加入若干个对象,然后遍历并打印出各元素的key和value。 【已完成】
12:编写程序,生成5个1至10之间的随机整数,存入一个List集合,编写方法对List集合进行排序(自定义排序算法,禁用Collections.sort方法和TreeSet),然后遍历集合输出 【已完成】
14:Collection集合下班有哪些类,哪些类又有哪些特点
List
Set
15: 求1000!的结果中包含多少个0?注:1000! = 1×2×3×4×5×...×999×1000
16: 编写一个类,增加一个实例方法用于打印一条字符串。并使用反射手段创建该类的对象,
并调用该对象中的方法。
17:编写一个类A,增加一个实力方法showString,用于打印一条字符串,在编写一个类TestA ,作为客户端,用键盘输入一个字符串,改字符串就是类A的全名,使用反射机制创建该类的对象,并调用该对象中的方法showString
