开发工具:
文件大小: 11mb
下载次数: 0
上传时间: 2019-04-20
详细说明:
Java面试及答案是个人从去年到今年,在面试过程中整理的一些面试中遇到的重点和难点,全部整理在这个pdf里面,希望能够给正在找工作和面试的朋友一些帮助!!1) public int indexof( int ch/ String str)//用于查找当前字符串中字符或子串,返回字
符或子串在当前字符串中从左边起首次出现的位置,若没有出现则返回-1
2) public int indexer( int ch/ String str, int fromlndex)//改方法与第一种类似,区别
在于该方法从 fromIndex位置向后查找
3) public int lastlndexof( int ch/ String str)/该方法与第·种类似,区别在于该方法
从字符串的末尾位置向前查找。
4) public int lastIndexof( int ch/ String str, int fromIndex)//该方法与第种方法类
似,区别」该方法从 rolodex位置向前查找。
复制代码
1 String str-I am a good student
2 int a= str indexof Ca'://a=2
3 int b= str indexof( good); //b=7
4 int c- str indexOf( w", 2); //c--1
5 int d= str last IndexOf(a);//
6 int e=str last IndexOf(a, 3);//e
复制代码
7、字符串中字符的大小写转换
1) public String toLowerCaseo/返回将当前字符串中所有字符转换成小写后的新串
2) public string toUpper CaseO//返回将当前字符串中所有字符转换成大写后的新串
String str new String("asDF
2 String strl= str. toLowerCaseo: //strl =asdf
3 String str2= str. toUpperCaseO; //str2=ASDE
8、字符串中字符的替换
1) public string replace( char oldchar, char newChar)//用字符 newChar替换当前字符
串中所有的 oldchar字符,并返回一个新的字符串。
2) public string replacefirst( String regex, String replacement)//该方法用字符
replacement的内容替换当前字符串中遇到的第一个和字符串 regex相匹配的子串,应将新
的字符串返回。
3) public String replaceAll(( String regex, String replacement)//该方汯用字符
replacement的内容替换当前字符串中遇到的所有和字符串 regex相匹配的子串,应将新的
字符串返回。
1 String str
d z
2 String strl str replace(a,g); //strl="gsdzxcg
3 String str2- str replace(asd", fgh); //str2-fghzxcfgh
4 String str 3= str replacefirst(asd", fgh); //str3=fghzxcasd
5 String str4 =str replaceAll( asd",fgh ) / /str4=fghzxcfgh
9、其他类方法
1) String trim(//截去字符串两端的空格,但对于中间的空格不处理
String str=a sd
2 String strl= str trimo
3 int a= str. length(; //a=6
4 int b= strl length; //b=4
2) boolean stat With( String prefix)或 boolean endWith(String suffix)/用来比较当前
字符串的起始字符或子字符串 prefix和终止字符或子字符串suix是否和当前字符串相同,
重载方法中同时还可以指定比较的开始位置 offsct
1 String str-asdfgh
2 boolean a=str. statWith(as"); //a = true
3 boolean b= str endWith(gh); //b=true
3region Matches(boolean b, int firstStart, String other, int otherStart, int
length)//从当前字符串的 firststart位置开始比较,取长度为 length的一个子字符串,
other字符串丛 otherstart位置开始,指定另外一个长度为 length的字符串,两字符串比
较,当b为true时宇符串不区分大小写。
4) contains( String str)/判断参数s是否被包含在字符串中,并返回一个布尔类型的值。
tudent
2 str contains(" stu ) //true
3 str contains("ok ); //false
5) String[] split( String str)/将str作为分隔符进行字符串分解,分解后的字字符串在
字符串数组中返回
d
2 Stringl I strl str split("!#"); //str1lo| ="asdstrllll ="gwe";str1l2I
五、字符串与基木类型的转换
1、字符串转换为基本类型
java.1ang包中有Byte、 Short、 Integer、 Float、 Double类的调用方法
1)public static byte parseByte(String s
2)public static short parse Short(String s)
3)public static short parselnt(String s
4)public static long parseLong(String s
5)public static float parseFloat(String s)
6)public static double parseDouble(String s)
例如
1 int n= Integer. parseInt(12")
2 float f= Float parsefloat( 12 34")
3 double d-Double. parseDouble( 1.124")
2、基本类型转换为字符串类型
String类中提供了 String value0Q放法,用作基木类型转换为字符串类型。
static String valueOf(char data[)
2)static String valueOf(char data[, int offset, int count)
3static String valueOf(boolean b
4)static String valueOf (char c)
5)static String valueof (int i)
6)static String valueOf (long 1)
static String valueOf(float f)
static String valueOf (double d)
例如
1 String s1- String valueOf(12)
2 String sl= String valueOf (12. 34)
3、进制转换
使用Long类中的方法得到整数之间的各种进制转换的方法:
Long. toBinary String(long 1)
Long toOctalString(long 1)
Long toHexString (long 1)
Iong. tostring( long 1,intp)//o作为任意进制
2. String, StringBuffer, StringBuilder的区别。
java中 String、 String Buffer、 StringBuilder是编程中经常使用的字符申类,他们之间
的区别也是经常在面试中会问到的问题。现在总结一下,看看他们的不同与相同。
1可变与不可变
String类中使用字符数组保存字符串,如卜就是,因为有"fina修饰符,所以叮以知
道 string对象是不可变的。
private final char value[]:
String builder与 String Buffer都继承自 Abstract string builder类,在
Abstractstring Builder中也是使用字符数组保存字符申,如下就是,可知这两种对象都是
可变的
charl] valuei
2.是否多线程安全
String中的对象是不可变的,也就可以理解为常量,显然线程安全
Abstractstring Builder是 StringBuilder与 StringBuffer的公共父类,定义了一些
字符串的基本操作,如 expand Capacity、 append、 insert、 indexof等公共方法。
String Buffer对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。
看如下源码
1 public synchronized StringBuffer reverse
2 super. reverse)
return this
6 public int indexEr(String str)
return indexof (str, 0)
//存在 public synchronized int
indexof( String str, int fromIndex)方法
String Builder并没有对法进行加同步锁,所以是非线程安全的
3 StringBuilder与 StringBuffer共同点
String Builder与 String Buffer有公共父类 Abstractstring Builder(抽象类)。
抽象类与接口的其中一个区别是:抽象类中可以定义一些子类的公共方法,子类只需要
增加新的功能,不需要重复写已经存在的方法;而接口中只是对方法的申明和常量的定义。
StringBuilder、 StringBuffer的方法都会调用 Abstractstring Builder中的公共方
法,如 super. append()。只是 String Buffer会在方法上加 synchronized关键字,进
行同步。
最后,如果程序不是多线程的,那么使用 StringBuilder效率高于 String Buffer
为什么先说 String呢?
其实绝大部分业务开发过程中 String都是最常用的类。常常利用 JProfiler这类工具做
内冇分析时,能看到char[](为什么是char[]在接下来的源码解读中会有提现)能站
到70%以上。
类关系图
mparable
CharSequence
Appendable
areTUiT): int
ength(): nt
append(:harsequcncc): Appendatlc
har At(int) cha'
append(CharSequence, int, in ] Appendable
subSequence[int, int): Charsequence
endtchari: a
-o Stringi): String
chars(: Instream
codePortso): Irtstrea
Abstractstring Builder
string
String Buffer
I StringBuilder
简要对比
差别
String
String Buffer
StringBuilder
常量
变常量
变量
变量
量
线程
是否安个
安仝
非安仝
安全
所在 Constant
内存 String
heap
heap
区域Po(常量池)
是否
能被否
不
否
继承
代码
3157
448
行数
718
在频繁进行字符串运算在频繁进行字符运算
使用在字符串不经
(如拼接、替换、删除
(如拼接、替换、和删除
场景常变化的场景等)
并且运行在多线程环境并且运行在单线程的环境
场景常量的声明、少XML解析、HTP参数sQL语句的拼装、Js0N
差别 String
String Buffer
String Builder
举例量的变量运算解析和封装
封装
从代码行数来上说 String类更大,其中大量的方法重载拓展了篇幅。同时注释文档详
细,注释的行文风格常常看到一个简短的定义之后,紧跟一个由tha或the引导的定
语从句(定语从句一般皆放在被它所修饰的名(代)词之后)。
例:
田 iew Codel
Abstractstring Builder: StringBuffer类与 StringBuilder类都继承∫
Abstractstring builder,抽象父类里实现了除 tostring以外的所有方法。
String Builder:自己重写了方法之后,全都在方法内 super function(,未做任何扩
展同时从类名语义上来说 String构建者,所以没有 substring方法看来也合情合理
String Buffer:在重写方法的同时,几乎所有方法都添加了 synchronized同步关键字;
常量与变量解释
String类是依赖一个私有字符常量表实现的
Ⅳ iew Codel
String Buffer与 String Bu|der都是继承 Abstractstring Builder,然而
Abstractstring Builder类是依赖一个字符变量表实现的;
E View Codel
线程安全分析
为什么 String是线程安全的?
首先, String是依赖字符常量表实现的;
其次,所有对 String发生修改的方法返回值都是一个新的 String对象,没有修改原有
对象;
小例:
View Code
为什么实现了以上提到的两点就是线程安全的呢?
以 String Builder类 append方法为示例,第19行将需要添加的vaue,通过
arraycopy方法复制到dst中。
t View co
场景假设:
假设有A、B两个线程, StringBuilder初始值为"1
A线程:执行 append("2")
B线程:执行 append("3");
过程分析
CPU在执行了部分A线程的逻辑,刚好执行到第19行,此时B线程已经执行完毕:
导致A线程开始执行 append("2")时, String Builder为"1";
执行到一半 String builder变成了"13
最后结果得到为"132";
过程图示
Heap-String Builder
三
(系统自动生成,下载前可以参看下载内容)
下载文件列表
相关说明
- 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
- 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。
- 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
- 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
- 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
- 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.