【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 方法替换“?”号

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类的常⽤⽅法

⼀、创建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中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安全编码规范

【安全开发】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章编程题答案

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面试题大全

往年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

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档