第一篇:黑馬程序員:工具類----獲取指定包名下的所有類[本站推薦]
分享一個獲取指定包名下所有類的工具類,代碼如下
1.2.3.4.5.6.7.8.9.import java.io.File;import java.io.FileFilter;
import java.lang.annotation.Annotation;import java.net.JarURLConnection;import java.net.URL;
import java.util.ArrayList;import java.util.Enumeration;import java.util.List;
import java.util.jar.JarEntry;
10.import java.util.jar.JarFile;11.12.public class ClassUtil { 13.// 獲取指定包名下的所有類 14.public static List
15.List
urls
= Thread.currentThread().getContextClassLoader().getResources(packageName.replaceAll(“.”, “/”));
18.while(urls.hasMoreElements()){ 19.URL url = urls.nextElement();20.if(url!= null){
21.String protocol = url.getProtocol();22.if(protocol.equals(“file”)){
23.String packagePath = url.getPath();
24.addClass(classList, packagePath, packageName, isRecursive);
25.} else if(protocol.equals(“jar”)){ 26.27.28.JarURLConnection jarURLConnection =(JarURLConnection)url.openConnection();
JarFile
jarFile
= jarURLConnection.getJarFile();
Enumeration
29.while(jarEntries.hasMoreElements()){
30.JarEntry jarEntry = jarEntries.nextElement();
31.String jarEntryName = jarEntry.getName();32.if(jarEntryName.endsWith(“.class”)){ 33.String
className
= jarEntryName.substring(0, jarEntryName.lastIndexOf(“.”)).replaceAll(“/”, “.”);
34.{
if(isRecursive || className.substring(0, className.lastIndexOf(“.”)).equals(packageName))35.classList.add(Class.forName(className));
36.} 37.} 38.} 39.} 40.} 41.}
42.} catch(Exception e){ 43.e.printStackTrace();44.}
45.return classList;46.} 47.48.// 獲取指定包名下的所有類(可根據(jù)注解進行過濾)49.public static List
50.List
urls
= Thread.currentThread().getContextClassLoader().getResources(packageName.replaceAll(“.”, “/”));
53.while(urls.hasMoreElements()){ 54.URL url = urls.nextElement();55.if(url!= null){
56.String protocol = url.getProtocol();57.if(protocol.equals(“file”)){
58.String packagePath = url.getPath();
59.addClassByAnnotation(classList, packagePath, packageName, annotationClass);
60.} else if(protocol.equals(“jar”)){ 61.62.63.JarURLConnection jarURLConnection =(JarURLConnection)url.openConnection();
JarFile
jarFile
= jarURLConnection.getJarFile();
Enumeration
64.while(jarEntries.hasMoreElements()){ 65.JarEntry
jarEntry
= jarEntries.nextElement();
66.String jarEntryName = jarEntry.getName();67.if(jarEntryName.endsWith(“.class”)){ 68.String
className
= jarEntryName.substring(0, jarEntryName.lastIndexOf(“.”)).replaceAll(“/”, “.”);
69.70.Class> cls = Class.forName(className);
if(cls.isAnnotationPresent(annotationClass)){
71.classList.add(cls);72.} 73.} 74.} 75.} 76.} 77.}
78.} catch(Exception e){ 79.e.printStackTrace();80.}
81.return classList;82.} 83.84.private static void addClass(List
85.try {
86.File[] files = getClassFiles(packagePath);
87.if(files!= null){
88.for(File file : files){
89.String fileName = file.getName();90.if(file.isFile()){
91.String className = getClassName(packageName, fileName);
92.classList.add(Class.forName(className));93.} else {
94.if(isRecursive){ 95.96.97.String subPackagePath = getSubPackagePath(packagePath, fileName);
String subPackageName = getSubPackageName(packageName, fileName);
addClass(classList, subPackagePath, subPackageName, isRecursive);
98.} 99.} 100.} 101.}
102.} catch(Exception e){ 103.e.printStackTrace();104.} 105.} 106.107.private static File[] getClassFiles(String packagePath){ 108.return new File(packagePath).listFiles(new FileFilter(){ 109.@Override
110.public boolean accept(File file){ 111.return
(file.isFile()
&& file.getName().endsWith(“.class”))|| file.isDirectory();
112.} 113.});114.} 115.116.private static String getClassName(String packageName, String fileName){
117.String className = fileName.substring(0, fileName.lastIndexOf(“.”));
118.if(org.apache.commons.lang.StringUtil.isNotEmpty(packageName)){
119.className = packageName + “.” + className;120.}
121.return className;122.} 123.124.private static String getSubPackagePath(String packagePath, String filePath){
125.String subPackagePath = filePath;126.if(org.apache.commons.lang.StringUtil.isNotEmpty(packagePath)){
127.subPackagePath = packagePath + “/” + subPackagePath;128.}
129.return subPackagePath;130.} 131.132.private static String getSubPackageName(String packageName, String filePath){
133.String subPackageName = filePath;134.if(org.apache.commons.lang.StringUtil.isNotEmpty(packageName)){
135.subPackageName = packageName + “.” + subPackageName;136.}
137.return subPackageName;138.} 139.140.private static void addClassByAnnotation(List
141.try {
142.File[] files = getClassFiles(packagePath);143.if(files!= null){
144.for(File file : files){
145.String fileName = file.getName();146.if(file.isFile()){
147.String className = getClassName(packageName, fileName);
148.Class> cls = Class.forName(className);149.if(cls.isAnnotationPresent(annotationClass)){
150.classList.add(cls);151.} 152.} else { 153.154.155.String
subPackagePath
= getSubPackagePath(packagePath, fileName);
String
subPackageName
= getSubPackageName(packageName, fileName);
addClassByAnnotation(classList, subPackagePath, subPackageName, annotationClass);
156.} 157.} 158.}
159.} catch(Exception e){ 160.e.printStackTrace();161.} 162.} 163.}
第二篇:黑馬程序員_PHP_課程同步筆記day30:PHP類中關鍵字
【黑馬程序員濟南】PHP課程同步筆記day30:PHP類中
關鍵字
今天我來為大家講解一下PHP類中的一些關鍵字: parent和self關鍵字 parent:
用在一個類的一個方法中;
代表這個類的“父類”——注意,是代表一個類,不是類的對象;
但:實際應用中,常常會看起來“代表”這個類的父類對象——因為用的時候,是使用了父類的對象來調(diào)用某個方法而產(chǎn)生了所謂的對象傳遞; [PHP] 純文本查看 復制代碼 ? 01
黑馬程序員濟南中心 編著 1;//聲明靜態(tài)屬12 性 13 } 14 15 class B extends A{ static function f1(){ echo “父類的靜態(tài)屬性s1:”.parent::$s1;echo “父類的常量PI:”.parent::PI;} } B::f1();顯示結果:
父類的靜態(tài)屬性s1:1
父類的常量PI:3.14
黑馬程序員濟南中心 編著
self:
用在一個類的一個方法中;
代表這個類“本身”——還是代表一個類,而不是類的對象; [PHP] 純文本查看 復制代碼 ? 01
黑馬程序員濟南中心 編著
己的常量PI:”.self::PI;} } B::f1();典型使用1:
在構造方法中,調(diào)用父類的構造方法,以完成對象的一些共同的數(shù)據(jù)初始化工作。[PHP] 純文本查看 復制代碼 ? 01
04 class Member{ 05 public $name;//聲明一個變量 06 public $salary;//聲明一個變量 07 //創(chuàng)建一個構造方法 08 function
09 __construct($name,$salary){ 10 $this->name = $name;//把實例11 化類時的實參傳遞給之前聲明好的變量 12 $this->salary = $salary;//把實例13 化類時的實參傳遞給之前聲明好的變量
黑馬程序員濟南中心 編著 } 15 } 16 class Teacher extends Member{ 17 public $edu;//聲明一個變量 18 //創(chuàng)建一個構造方法 19 function __construct($name,$salary,$edu){ 21 //$this->name = $name;22 //$this->salary = $salary;23 //將上面兩行的內(nèi)容用下面一行類24 代替 //調(diào)用父類的構造方法,去完成一個26 共同屬性數(shù)據(jù)的初始化 parent::__construct($name,$salar28 y);29 //把實例化類時的實參傳遞給之前聲30 明好的變量
$this->edu = $edu;32 } 33 } 34 class Student extends Member{ 35 public $age;//聲明一個變量
黑馬程序員濟南中心 編著
//創(chuàng)建一個構造方法 37 function
__construct($name,$salary,$age){ 39
//調(diào)用父類的構造方法,去完成一個41 共同屬性數(shù)據(jù)的初始化
parent::__construct($name,$salary);//把實例化類時的實參傳遞給之前聲明好的變量
$this->age = $age;} } $t1 = new Teacher(“老師”,1000,“大學”);echo “
”;var_dump($t1);echo “
”;$s1 = new Student(“學生”,100,18);var_dump($s1);
黑馬程序員濟南中心 編著
不知道大家對今天講解的parent和self關鍵字學習的程度如何?。咳绻信d趣,歡迎來黑馬程序員濟南中心來詳細了解PHP~
黑馬程序員濟南中心 編著
第三篇:黑馬程序員_PHP_課程同步筆記day33:類和對象的其他相關技術[推薦]
類和對象的其他相關技術
類的自動加載: 基本概念:
當在一個代碼中,需要使用一個類(比如new),但此時,在這行代碼之前,都沒有出現(xiàn)過該類的定義,則php有一種機制,可以讓系統(tǒng)這個時候去調(diào)用一個函數(shù),在該函數(shù)中,我們就可以預先寫好加載類的代碼——這樣就實現(xiàn)了類的自動加載。
該函數(shù)就是:__autoload()該函數(shù)使用形式如下:
function __autoload($class_name){
//這里就可以去寫加載類的代碼,其中:
//$class_name就代表“正需要”的那個類名;
} [PHP] 純文本查看 復制代碼 ? 1
黑馬程序員濟南中心 編著
可見,實現(xiàn)這種類的自動加載的方便性,需要做到:
1,類文件名有一個統(tǒng)一的形式:比如:類名.clsss.php
2,統(tǒng)一都放在一個文件夾中;
3,盡可能做到:一個類文件中,只放一個類的定義;
自定義類的加載函數(shù)
使用下述函數(shù),可以人為定義“多個”自動加載函數(shù)(這些函數(shù)的作用跟__autoload)一樣。使用形式:
spl_autoload_register(“自動加載函數(shù)名1”);
spl_autoload_register(“自動加載函數(shù)名2”);
。。
然后就可以去定義這些函數(shù)了
在運行的時候,如果需要一個類,就先調(diào)用第1個函數(shù)去“試圖”加載該類,如果在該函數(shù)中沒有加載成功,就會繼續(xù)調(diào)用下一個函數(shù)繼續(xù)“試圖”加載該類,依此類推。。舉例:
[PHP] 純文本查看 復制代碼 ? 01
04 spl_autoload_register(“auto1”);
黑馬程序員濟南中心 編著
05 spl_autoload_register(“auto2”);06 function auto1($class_name){ 07 echo “
進入auto1,需要:$class_name”;08 $file = “./{$class_name}.class.php”;09 if(file_exists($file)){ 10 include_one $file;11 } 12 } 13 function auto2($class_name){ 14 echo “
進入auto2,需要:$class_name”;15 $file = “./{$class_name}.class.php”;16 if(file_exists($file)){ 17 include_one $file;18 } 19 } 20 $obj1 = new A();22 echo “
”;23 var_dump($obj1);24 $obj2 = new B();26 echo “
”;
黑馬程序員濟南中心 編著 var_dump($obj2);
展示結果為: 進入auto1,需要:A object(A)#1(0){} 進入auto1,需要:B 進入auto2,需要:B object(B)#2(0){}
對象的復制
$obj1 = new A();
$obj2 = $obj1;
//這里,雖然是值傳遞,但因為對象數(shù)據(jù)存儲的特殊性,并沒有復制對象數(shù)據(jù)本身
//即,并沒有生成一個新對象;
要想復制一個對象——得到一個完完全全的相同的對象,只能這樣:
$obj3 = clone $obj1;[PHP] 純文本查看 復制代碼 ? 01
黑馬程序員濟南中心 編著
05 } 06
07 $obj1 = new A();08 $obj2 = $obj1;09 $obj3 = clone $obj1;10 var_dump($obj1);11 var_dump($obj2);12 var_dump($obj3);13 $obj1->p1 = 11;15 var_dump($obj1);16 var_dump($obj2);17 var_dump($obj3);展示效果:
object(A)#1(1){[“p1”]=>int(1)} object(A)#1(1){[“p1”]=>int(1)} object(A)#2(1){[“p1”]=>int(1)}
object(A)#1(1){[“p1”]=>int(11)} object(A)#1(1){[“p1”]=>int(11)} object(A)#2(1){[“p1”]=>int(1)}
黑馬程序員濟南中心 編著
可見,普通賦值所得到的對象,仍然是原來的對象;
只有clone所得到的對象,才是一個全新的對象; 注意:
1,當對一個對象進行克隆的時候,就會自動調(diào)用系統(tǒng)中的__clone()魔術方法(如果有);
2,因此,對于單例類的需求來說,就應該做到:禁止克隆,寫法:
private function __clone(){ }
對象的遍歷
跟數(shù)組類似,對象的“所有屬性”,也是可以進行遍歷的——一個一個取出。
形式:
foreach($對象 as $prop => $value){
//$prop表示屬性名;
//$value表示對應的屬性值;
} 注意:
其實能取到的屬性數(shù)據(jù),只是在該位置可以訪問(有權限訪問)到的那些。[PHP] 純文本查看 復制代碼 ? 01
黑馬程序員濟南中心 編著
04 05 class A{ 06 public $p1 = 1;07 protected $p2 08 = 2;09 private $p3 = 3;10 static $p4 = 4;11 function 12 showInfo(){ 13 foreach($this 14 as $prop=>$value){ 16 echo “屬性17 $prop = $value”;18 } 19 } 20 } 21
$a1 = new A();foreach($a1 as $prop=>$value){ echo “屬性
黑馬程序員濟南中心 編著
$prop = $value”;}
$a1->showInfo();展示效果: 屬性p1 = 1;
屬性p1 = 1 屬性p2 =2 屬性p3 = 3
不知道大家對今天講的類和對象的其他相關技術學習的怎么樣啊?有什么疑問歡迎來黑馬程序員濟南中心來咨詢喲~
黑馬程序員濟南中心 編著
第四篇:黑馬程序員_PHP_課程同步筆記day34:PHP類其他魔術方法
【黑馬程序員濟南】PHP類其他魔術方法
序列化:
就是將一個變量的“內(nèi)存數(shù)據(jù)形式”,轉換為“硬盤數(shù)據(jù)形式”的過程。
分2步就可以:
1,$str = serialize($變量);//該函數(shù)將該變量數(shù)據(jù),轉換為一個字符串
2,file_put_contents(“文本文件名”, $str);//將該字符串保存到該文件中。[PHP] 純文本查看 復制代碼 ? 01 5.5,'bbcc'=>true);13 $data3 = new A();
黑馬程序員濟南中心 編著 //開始轉換得到一個字符串 16 $str1 = serialize($data1);17 $str2 = serialize($data2);18 $str3 = serialize($data3);19 //開始寫入硬盤中 file_put_contents('./file1.txt',$str1);22 file_put_contents('./file2.txt',$str2);23 file_put_contents('./file3.txt',$str3);24
[align=left] 反序列化:
將已經(jīng)存到硬盤的變量數(shù)據(jù),轉換(恢復)到內(nèi)存數(shù)據(jù)(變量)形式的過程。同樣分2步:
1,$str = file_get_contents(文本文件名);
//讀取出序列化之后所存儲的文件內(nèi)容(就是字符串)
2,$變量 = unserialize($str);
//將該字符串恢復為變量(數(shù)據(jù));
[PHP] 純文本查看 復制代碼 ? 01
黑馬程序員濟南中心 編著
02 //演示3中數(shù)據(jù)的序列化結果 03 class A{ 04 public $p1 = 1;05 protected $p2 = 2;06 private $p3 = 3;07 } 08
09 //開始從硬盤中讀取數(shù)據(jù)(字符串)10 $str1 = file_get_contents('./file1.txt');11 $str2 = file_get_contents('./file2.txt');12 $str3 = file_get_contents('./file3.txt');13 //開始轉換得到一個字符串 15 $data1 = unserialize($str1);16 $data2 = unserialize($str2);17 $data3 = unserialize($str3);18 var_dump($data1);20 var_dump($data2);21 var_dump($data3);結果為: float(1.1)
黑馬程序員濟南中心 編著
array(3){[0]=>string(2)“aa” [5]=>float(5.5)[“bbcc”]=>bool(true)} object(A)#1(3){[“p1”]=>int(1)[“p2”:protected]=>int(2)[“p3”:“A”:private]=>int(3)} __sleep():
該魔術方法是對一個對象進行“序列化”的時候,會被自動調(diào)用。
此時,在該方法中,我們就可以(而且必須)返回一個數(shù)組,該數(shù)組中含所有我們“想要”對該對象的屬性進行序列化的屬性名。[PHP] 純文本查看 復制代碼 ? 01
黑馬程序員濟南中心 編著 }
__wakeup()
該魔術方法是對一個對象進行“反序列化”的時候,會被自動調(diào)用。
此時,該對象的屬性值,就會恢復到“原來的數(shù)據(jù)”
但:如果某個屬性當時并沒有做序列化,則此時就不會恢復為原來對象的數(shù)據(jù),而是恢復為該類中的初始數(shù)據(jù); [PHP] 純文本查看 復制代碼 ? 01
黑馬程序員濟南中心 編著 $this->p1 = $p1;13 $this->p2 = $p2;14 $this->p3 = $p3;15 } 16 function __sleep(){ 17 return 18 array(“p1”,“p3”);19 } 20 function 21 __wakeup(){ 22 echo “對象蘇醒23 了。。”;24 } 25 } 26
$s1 = new S(11,12,13);$str = serialize($s1);var_dump($)
[align=left]
黑馬程序員濟南中心 編著
不知道大家對今天講的PHP類其他魔術方法相關技術學習的怎么樣?。坑惺裁匆蓡枤g迎來黑馬程序員濟南中心來咨詢喲~
黑馬程序員濟南中心 編著
第五篇:黑馬程序員java培訓就業(yè)班筆記:day14(多線程、String類)總結
Day14總結:
1、wait和sleep的區(qū)別:(面試題)
1、sleep指定時間,wait可以指定時間,也可以不用指定時間。
2、wait方法必須定義在同步中,sleep方法不一定。
3、在同步中wait sleep對于執(zhí)行權和鎖的處理不同: i.Sleep釋放CPU執(zhí)行權,但是沒有釋放鎖。ii.Wait釋放執(zhí)行權、釋放鎖。實現(xiàn)代碼: Public void run(){ Synchronized(this){ Code…sleep(10);//此線程進入凍結狀態(tài),釋放了執(zhí)行權,并沒有釋放鎖。
Wait();//等待狀態(tài)下,釋放執(zhí)行權、釋放鎖,因為它需要被對象喚醒,所以要釋放鎖
} } Public void method(){ Synchronized(this){
notifyAll();//喚醒上面所有的線程。但是此時t0、t1并沒有執(zhí)行,因為鎖還在此線程中,只有當它執(zhí)行完畢之后,釋放鎖。它們獲取鎖之后才有機會執(zhí)行。
} }
2、停止線程:
1、Stop方法已經(jīng)過時,為什么?因為該方法具有不固定的安全性。
如何停止線程? 只有一種方法:
線程執(zhí)行的代碼結束,線程會自動終止。
1、run方法中通常有循環(huán),所以只要循環(huán)結束即可。所以只要控制循環(huán)條件。最簡單的方式就是定義標記。
2、如果run中有同步可以讓線程出現(xiàn)凍結狀態(tài)的方法,比如wait那么線程就不會去讀取標記。這時必須讓線程恢復到運行狀態(tài)才可以有機會讀取到標記,所以通過正常的恢復方法比如notify、sleep時間到,但是如果沒有辦法正?;謴?,就必須使用強制手段,interrupt方法,強制將線程的凍結狀態(tài)清除,讓線程恢復運行。其實就是讓線程重新獲取讀取標記、結束。但是別忘了強制動作會產(chǎn)生異常要處理。實現(xiàn)代碼:
StopThreadDemo.java
class StopThread implements Runnable
{ private boolean flag=true;//定義標記控制住循環(huán)。public synchronized void run(){ while(flag)//開始true、此時定義標記控制循環(huán)。
{
try
{
wait();//當存在同步時,wait方法不會讓線程去讀取標記。此時主線程結束了,但是這兩個線程卻在這里等待了。并沒有結束。
}
catch(InterruptedException e)
{
System.out.println(Thread.currentThread().getName()+“....Exception”);
setFlag();//如果發(fā)生了強制中斷,只要把狀態(tài)切斷到假。
}
System.out.println(Thread.currentThread().getName()+“...”);} } public void setFlag(){ flag=false;} }
class StopThreadDemo { public static void main(String[] args){ StopThread st=new StopThread();Thread t1=new Thread(st);Thread t2=new Thread(st);t1.start();t2.setDaemon(true);//標記成了守護線程。
t2.start();
for(int x=0;;x++){
if(x==50)
{
st.setFlag();
t1.interrupt();//t1將它的凍結狀態(tài)強制結束。
t2.interrupt();//中斷方法。其實不是中斷線程。而且還拋出了異常。
//其實會將凍結中的線程強行恢復到運行狀態(tài),就會讀到標記。這就是中斷線程。并不是結束線程。一定要注意要區(qū)分。
//
break;
}
System.out.println(Thread.currentThread().getName()+“....”);}
System.out.println(“Hello World!”);} }
3、守護線程:setDaemon();線程標記,守護線程,當正在運行的線程是守護線程時,JVM自動退出,該方法在開啟之前調(diào)用,也就是說在start方法之前調(diào)用。
線程分兩種:
前臺線程:自己創(chuàng)建的線程都是前臺線程。
后臺線程:一旦調(diào)用了此方法為守護線程之后的線程都是守護線程。
區(qū)別:都是線程,啟動后都再搶奪CPU的執(zhí)行權,這里是沒有區(qū)別的,最大的區(qū)別就是如果線程結束了,正在運行的后臺線程也隨著結束,簡單的說后臺線程是以來前臺線程而執(zhí)行的。
4、線程細節(jié):
1、join:當A線程執(zhí)行到B線程時,那么A線程就會等待,等B執(zhí)行完畢,A才會執(zhí)行。
代碼實現(xiàn):
D1.join();d1加入,說明了主線程必須先釋放執(zhí)行權給它,等到d1結束之后主線程才恢復執(zhí)行狀態(tài),所以輸出結果是等d1全部都執(zhí)行完畢之后,才有其他線程的交替執(zhí)行。
記住:誰把執(zhí)行權給了誰,就只和給的對象的執(zhí)行權有關,等它結束之后,就會重新獲取執(zhí)行
記?。褐骶€程是因為誰放棄了執(zhí)行權,就只和那個線程有關系權,與其他線程無關。
2、優(yōu)先級:代表搶奪資源的頻率。有兩種方法:getPriority setPriority來獲取優(yōu)先級和設置優(yōu)先級,只有十個數(shù)字可以使用1-10這十個數(shù)字,同時線程中提供了幾個特殊的方法: 線程類中提供了MAX_PRIORITY MIN_PRIORTY NORM_PRIORTY。
3、yield:結束該線程,釋放執(zhí)行權。
4、toString();獲取線程詳細信息,包括線程組、線程名、所屬線程。實現(xiàn)代碼:ThreadMethodDemo.java
5、string類:
1、字符串的特點:
1、java中用String類來描述字符串。
2、字符串是一個特殊的對象,一旦初始化就不可以被改變,因為是常量。面試題1: String s=“abc”;String s1=new Strng(“abc”);是否相同?
前者“abc”是一個對象。后者是兩個對象,new string()代表一個對象,“abc”也代表一個對象。
Sop(s1==s2);==比較的是數(shù)據(jù)。false Sop(s1.equals(s2));比較的是內(nèi)存的地址值,equals覆寫了Object類中的equals方法。True
面試題2: String a=“abcd”;//在緩沖池創(chuàng)建了一個abcd的字符串。String a1=“ab”;//a1和a2都是變量,無法確定。
String a2=“cd”;String b=a1+a2;//b是要重新進行分配的。
String c=“ab”+“cd”;//兩個都是常量值,用連接符連接在一起還是字符創(chuàng)。abcd System.out.println(“a==b:”+(a==b));//false System.out.println(“a==c:”+(a==c));//true
2、常見操作方法:
1、獲?。?/p>
a)獲取長度:
Int length();數(shù)組長度是個屬性,字符串是個方法 b)獲取字符串中的字符:
charAt(int index);返回值是一個字符。
c)一個字符或者一個字符串在一個字符串中的位置
Int indexof(int ch)Int indexof(int ch,int fromIndex)Int indexof(ch,fromIndex)Int indexof(srting,fromindex)Int lastIndexof(ch);注意:這些獲取索引位的方法,如果沒有查找的內(nèi)容,返回-1,所以這個方法。
d)獲取部分字符串:
String substring(begin,end)
2、判斷:
a)是否包含指定的字符串
Boolean contains(String)
b)是否是以指定的字符串開頭
Boolean startsWith(String)c)是否是以指定的字符串結尾
Boolean endwith(String)d)忽略大小寫判斷字符串
Boolean equalsIgnoreCase(string)
3、轉換:
a)將字符串轉成大小寫
String toLowerCase();String toUpperCase();b)將字符串轉成數(shù)組
Byte[] getBytes();Char[] getChar();c)將字符串轉成字符串數(shù)組
String[] d)將字符串中的內(nèi)容進行替換
String replace(oldch1,new ch2)String replace(string1,string2)e)去除字符串兩端的空白
Trim();如何查閱API文檔的小技巧,先查找返回值類型,縮小查找范圍。實現(xiàn)代碼:
ublic static void main(String[] args){
// stringMethod4();
String str = “
ab c
”;
System.out.println(“-”+str.trim()+“-”);
String s = String.valueOf(4);
System.out.println(4+“");
System.out.println(”ab“+”cd“);
System.out.println(”ab“.concat(”cd“));
}
private static void stringMethod4(){
String str = ”lisi.wangwu.zhaoliu“;
} String[] strs = str.split(”.“);for(int i = 0;i < strs.length;i++){ System.out.println(strs[i]);}
str = ”hello“;
String s = str.replace('a', 'k');
System.out.println(”s=“+s);System.out.println(str);private static void stringMethod3(){
String str = ”aBCd“;
String s = str.toLowerCase();System.out.println(s);String s1 = str.toUpperCase();System.out.println(s1);
System.out.println(str);
char[] arr = str.toCharArray();
for(int x = 0;x System.out.println(arr[x]);} } private static void stringMethod2(){ String str = ”ThreadDemo.java“; System.out.println(”contains(Demo):“+str.contains(”Demo“));System.out.println(”starsWith(Thread):“+str.startsWith(”Thread“));System.out.println(”endsWith(.java):“+str.endsWith(”.java“));System.out.println(”isEmpty:“+str.isEmpty());str = ”abc“;說 System.out.println(str.equalsIgnoreCase(”abC“));} private static void stringMethod(){ String str = ”abcdaef“;System.out.println(”length;“+str.length()); System.out.println(”charAt(2):“+str.charAt(2)); System.out.println(”indexOf(a):“+str.indexOf('a',2)); System.out.println(”lastIndexOf(a):“+str.lastIndexOf('k')); System.out.println(”substring(1,3):"+str.substring(0,str.length()));}