java字符串算法筆試題及答案

java字符串算法筆試題及答案

長(zhǎng)沙達(dá)內(nèi)教育      2022-04-21 08:00:01     9

java字符串算法筆試題及答案,在java筆試題中,java字符串算法筆試題是不可缺少的一部分,長(zhǎng)沙達(dá)內(nèi)教育java培訓(xùn)機(jī)構(gòu)的小編整理了一份java字符串算法筆試題及答

課程價(jià)格 請(qǐng)咨詢

上課時(shí)段: 授課校區(qū):

詳細(xì)介紹

在java筆試題中,java字符串算法筆試題是不可缺少的一部分,長(zhǎng)沙達(dá)內(nèi)教育java培訓(xùn)機(jī)構(gòu)的小編整理了一份java字符串算法筆試題及答案,希望對(duì)大家能夠有所幫助。

1、什么是String,它是什么數(shù)據(jù)類型?

答:String是定義在java.lang包下的一個(gè)類,它不是基本數(shù)據(jù)類型。

String是不可變的,JWM使用字符串池來(lái)儲(chǔ)存所有的字符串對(duì)象。

2、創(chuàng)建String對(duì)象的不同方式有哪些?

答:兩種方式。

一種是通過(guò)new很關(guān)鍵字來(lái)創(chuàng)建。使用這種方式時(shí),JWM創(chuàng)建字符串對(duì)象但不存儲(chǔ)在字符串池中,我們可以調(diào)用intern()方法將該字符串對(duì)象存儲(chǔ)在字符串池中,如果該字符串池已經(jīng)有了同樣值得字符串,則返回引用。

另一種是使用雙引號(hào)來(lái)直接創(chuàng)建。使用這種方式時(shí)。JVM去字符串找有么有相同值得字符串,如果有,則返回找到的字符串引用。否則創(chuàng)建一個(gè)新的字符串對(duì)象,并·存儲(chǔ)在字符串池中。

例如:

String?str=new?String("abc");String?str1="abc";

3、寫一個(gè)方法來(lái)判斷一個(gè)String是否是回文(順讀和倒讀都一樣的詞)?

答:String類中并沒(méi)有提供翻轉(zhuǎn)方法供我們使用,但StringBuffer和StringBuilder有reverse方法。

private?static?boolen?isPalindrome(String?str){	if(str==null){		return?false;	}	StringBuilder?strBuilder=new?StringBuilder(str);	srtBuilder.reverse();	return?strBuilder.toString().equals(str);}

不使用reverse方法實(shí)現(xiàn)

private?static?boolean?isPalindromeString(String?str){	if(str==null)		return?null;	int?length=str.length();	System.out.println(length/2);	for(int?i=0;i<length/2;i++){		if(str.charAt(i)!=str.charAt(length-i-1))			return?false;	}	return?true;}

4、如何讓一個(gè)字符串變成小寫或大寫形式?

答:toUpperCase和toLowerCase方法

5、如何比較兩個(gè)字符串?

答:String內(nèi)部實(shí)現(xiàn)了Comparable接口,有兩個(gè)比較方法:compareTo(String anotherString)和compareToIgnoreCase(String str)。

compareTo(String anotherString)與傳入的anotherString字符串進(jìn)行比較,如果小于傳入的字符串返回負(fù)數(shù),如果大于則返回正數(shù)。當(dāng)兩個(gè)字符串值想等時(shí),返回0此時(shí)equals方法會(huì)返回true。

equalsIgnoreCase(String str)該方法與compareTo方法類似,區(qū)別只是內(nèi)部利用了Character.toUpperCase等方法進(jìn)行了大小轉(zhuǎn)換后進(jìn)行比較。

6、如何將String轉(zhuǎn)換為char,反過(guò)來(lái)呢?

答:String是一系列字符,所以我們無(wú)法轉(zhuǎn)換成單一的char但是可以調(diào)用toCharArray()方法將字符串轉(zhuǎn)換成字符數(shù)組。

String?str="Java?interview";	//string?to?char?array;	char[]?chars=str.toCharArray();	system.out.println(chars.length);

7、如何將String轉(zhuǎn)換為byte array,反過(guò)來(lái)呢?

答:使用String的getBytes()方法將String轉(zhuǎn)換成byte數(shù)組,使用String的構(gòu)造方法new String(byte[] arr)將byte數(shù)據(jù)轉(zhuǎn)為String。

public?class?StringToByteArray{	public?static?void?main(String[]?args){			String?str="PANKAJ";			byte[]?byteArr=str.getBytes();			//print?the?byte[]?elements			System.out.println("String?to?byte?array:"+Array.toString(byteArr))	}	public?static?void?main(String[]?args)	{		byte[]?byteArray={'P','A','N','k','A','J'};		byte[]?byteArray={80,65,78,75,65,74};		String?str=new?String(byteArray);		Srting?str1=new?String(byteArray1);		System.out.println(str);		System.out.println(str1);	}}

8、淺談一下String, StringBuffer,StringBuilder的區(qū)別?

答:String是不可變類,每當(dāng)我們對(duì)String進(jìn)行操作的時(shí)候,總會(huì)創(chuàng)建新的字符串。操作String和耗費(fèi)資源,所以java提供了兩個(gè)工具類來(lái)操作String——StringBuffer和StringBuilder。

StringBuilder和StringBuffer是可變類,StringBuffer是線程安全的,StringBuilder則不是線程安全的。所以在多線程對(duì)同一字符串進(jìn)行操作的時(shí)候,我們選擇StringBuffer。在不需要處理多線程的情況下,StringBuilder的效率比StringBuffer高。

9、String是不可變的有什么好處?

答:由于String是不可變類,所以在多線程中使用是安全的,我們不需要做其他任何同步操作。

String是不可變的,其值也是不可變的,所以用來(lái)存儲(chǔ)數(shù)據(jù)密碼很安全。

因?yàn)閖ava字符串不可變,可以在java運(yùn)行時(shí)節(jié)省大量堆空間。因?yàn)椴煌淖址兞靠梢砸贸刂械南嗤淖址?。如果字符串是可變的話,任何一個(gè)變量的值改變,就會(huì)映射到其他變量,那么字符串池也就沒(méi)有什么意義了。

10、如何分割一個(gè)String?

答:public String[] split(String regex):

根據(jù)傳入的正則字符串進(jìn)行分割,注意,如果最后一位剛好有傳入的字符,則返回的數(shù)組不會(huì)有空字符串。

String?s="abcada"	System.out.println(Arrays.toString(s.split("a"));	//以上代碼輸出結(jié)果為[,bc,,d].	public?String[]?split(String?regex,int?limit):	//限制分割結(jié)果數(shù)組中有幾個(gè)字符串。傳入2,則結(jié)果分割后數(shù)組長(zhǎng)度為2。	String?s="Y,Kunming,Yunnan";	String[]?data=s.split(",".2);	System.out.println("Name=",data[0]);//Y	System.out.println("Address=",data[1]);//Kunming,Yunnan	//實(shí)際上第一個(gè)方法調(diào)用了第二個(gè)方法,只不過(guò)不限制返回的數(shù)組長(zhǎng)度了	public?String[]?split(String?regex)	{		return?split(regex,0);	}	

11、如何判斷兩個(gè)String是否相等?

答:有兩種方式判斷字符串是否相等,使用“= = ”或者使用equals方法。當(dāng)使用 “= =”操作符時(shí),不僅比較字符串的值還比較引用的內(nèi)存的值。大多相互情況下,我們只需要判斷值是否相等,此時(shí)用equals方法即可。

還有一個(gè)用equalsIgnoreCase可以用來(lái)忽略大小寫進(jìn)行比較。

String?s1="abc";	String?s2="abc"	String?s3=new?String("abc");	System.out.println("s1?==?s2???"+(s1==s2));//true	System.out.println("s1?==?s3???"+(s1==s3));//false	System.out.println("s1?equals?s3???"+s1.equals(s3));//true

12、String的intern()方法

答:當(dāng)intern()方法被調(diào)用,如果字符串池中已經(jīng)有一個(gè)字符串和當(dāng)前調(diào)用方法的字符串equals相等,那么就會(huì)返回池中的字符串。如果池中沒(méi)有的話,則首先將當(dāng)前字符串加入到池中,然后返回引用。

13、String是線程安全的嗎?

答:String是不可變量,一旦創(chuàng)建了String對(duì)象,我們就無(wú)法改變他的值,因此,它的線程是安全的,可以安全的用于多線程環(huán)境中。

14、為什么我們?cè)谑褂肏ashMap的時(shí)候總是用String做key?

答:因?yàn)樽址遣豢勺兊?,?dāng)創(chuàng)建字符串的時(shí)候,他的hashcode被緩存下來(lái),不需要再次計(jì)算。因?yàn)镠ashMap內(nèi)部實(shí)現(xiàn)是通過(guò)key的hashcode來(lái)確定value的存儲(chǔ)位置,所以相比于其他對(duì)象更快。這也就是為什么我們平時(shí)使用String作為HashMatp對(duì)象。

15、這里引入一個(gè)新的問(wèn)題,了解String.intern()方法嗎?

String.intern()查找常量池中是否有相同的unicode字符串常量,如果有則返回其引用,如果沒(méi)有,則在常量池中增加一個(gè)unicode等于str的字符串并返回它的引用。因此在用String進(jìn)行字符串拼接時(shí),會(huì)產(chǎn)生很多臨時(shí)變量。建議多使用StringBuffer/StringBuilder。

16、String/StringBuffer/StringBuilder都分別存放在什么地方?

String是存放在常量池中,在編譯期間已經(jīng)被確定了。new String()不是字符串常量,他有自己的地址空間,放在堆空間,而其他兩個(gè)都存放在堆空間中。

以上就是長(zhǎng)沙達(dá)內(nèi)教育java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“java字符串算法筆試題及答案”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問(wèn),請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。

Java筆試題

培訓(xùn)啦提醒您:交易時(shí)請(qǐng)核實(shí)對(duì)方資質(zhì),對(duì)于過(guò)大宣傳或承諾需謹(jǐn)慎!任何要求預(yù)付定金、匯款等方式均存在風(fēng)險(xiǎn),謹(jǐn)防上當(dāng)。