我的第一篇文章

 

2012321日,我买了来北京的火车票,22日早上7z4次列车准时达到北京,来到了久别四年的北京。刚到站的那一刻,有着非常熟悉的感觉。四年前,我平生第一次到北京-祖国的首都。现在还依稀记得刚到站的那一刻,心情非常激动。四年后,我又一次来到了这个熟悉的地方。从南广场出来,坐982路公交来到了传智播客。时间过得真快,我已经来北京一个多月了,课也上了差不多一半了。这段时间感觉过得非常充实,每天都能学到很多知识。在课堂上老师会将很多知识,只是感觉时间非常少,没有太多时间去练习。昨天学习了API常见类--string类,感觉掌握得不是十分好,讲的内容难度不是很大但是内容比较细比较杂,需要记忆的东西比较多,下课之后还需要好好消化。然后就是上课讲的那几道练习题,还需要理解一下。

API常见类---String

特点:字符串一旦被初始化,就不可以被改变。存放在方法区中的常量池中。

-------------------------------------------------------------------------------

String s1 = "abc"; // s1指向的内存中只有一个对象abc。

String s2 = new String("abc"); // s2指向的内容中有两个对象abc、new 。

System.out.println(s1==s2);//false

System.out.println(s1.equals(s2));//true ,字符串中equals比较的是字符串内容是否相同。

-------------------------------------------------------------------------------

字符串的方法:

1:构造方法:将字节数组或者字符数组转成字符串。

String s1 = new String();//创建了一个空内容的字符串。 

String s2 = null;//s2没有任何对象指向,是一个null常量值。

String s3 = "";//s3指向一个具体的字符串对象,只不过这个字符串中没有内容。

//一般在定义字符串时,不用new。

String s4 = new String("abc");

String s5 = "abc"; 一般用此写法

new String(char[]);//将字符数组转成字符串。

new String(char[],offset,count);//将字符数组中的一部分转成字符串。

2:一般方法:

按照面向对象的思想:

2.1 获取:

2.1.1:获取字符串的长度。length();

2.1.2:指定位置的字符。char charAt(int index);

2.1.3:获取指定字符的位置。如果不存在返回-1,所以可以通过返回值-1来判断某一个字符不存在的情况。

int indexOf(int ch);//返回第一次找到的字符角标

int indexOf(int ch,int fromIndex); //返回从指定位置开始第一次找到的角标

int indexOf(String str); //返回第一次找到的字符串角标

int indexOf(String str,int fromIndex);

int lastIndexOf(int ch);

int lastIndexOf(int ch,int fromIndex);

int lastIndexOf(String str);

int lastIndexOf(String str,int fromIndex);

2.1.4:获取子串。

String substring(int start);//从start位开始,到length()-1为止.

String substring(int start,int end);//从start开始到end为止。//包含start位,不包含end位。

substring(0,str.length());//获取整串

2.2 判断:

2.2.1:字符串中包含指定的字符串吗?

boolean contains(String substring);

2.2.2:字符串是否以指定字符串开头啊?

boolean startsWith(string);

2.2.3:字符串是否以指定字符串结尾啊?

boolean endsWith(string);

2.2.4:判断字符串是否相同

boolean equals(string);//覆盖了Object中的方法,判断字符串内容是否相同。

2.2.5:判断字符串内容是否相同,忽略大小写。

boolean equalsIgnoreCase(string) ;

2.3 转换:

2.3.1:通过构造函数可以将字符数组或者字节数组转成字符串。

2.3.2:可以通过字符串中的静态方法,将字符数组转成字符串。

static String copyValueOf(char[] );

static String copyValueOf(char[],int offset,int count);

static String valueOf(char[]);

static String valueOf(char[],int offset,int count);

2.3.3:将基本数据类型或者对象转成字符串。

static String valueOf(char);

static String valueOf(boolean);

static String valueOf(double);

static String valueOf(float);

static String valueOf(int);

static String valueOf(long);

static String valueOf(Object);

2.3.4:将字符串转成大小写。

String toLowerCase();

String toUpperCase();

2.3.5:将字符串转成数组。

char[] toCharArray();//转成字符数组。

byte[] getBytes();//可以加入编码表。转成字节数组。

2.3.6:将字符串转成字符串数组。切割方法。

String[] split(分割的规则-字符串);

2.3.7:将字符串进行内容替换。变成新字符串。

String replace(oldChar,newChar);

String replace(oldstring,newstring);

2.3.8: String concat(string); //对字符串进行追加。

String trim();//去除字符串两端的空格

int compareTo();//如果参数字符串等于此字符串,则返回值 0;如果此字符串按字典顺序小于字符串参数,则返回一个小于 0 的值;如果此字符串按字典顺序大于字符串参数,则返回一个大于 0 的值。

StringBuffer字符串缓冲区

构造一个其中不带字符的字符串缓冲区,初始容量为 16 个字符。

特点:

1:可以对字符串内容进行修改。

2:是一个容器。

3:是可变长度的。

4:缓冲区中可以存储任意类型的数据。

5:最终需要变成字符串。

容器通常具备一些固定的方法:

1,添加。

StringBuffer append(data):在缓冲区中追加数据。追加到尾部。

StringBuffer insert(index,data):在指定位置插入数据。

2,删除。

StringBuffer delete(start,end);删除从start至end-1范围的元素

StringBuffer deleteCharAt(index);删除指定位置的元素

//sb.delete(0,sb.length());//清空缓冲区。

3,修改。

StringBuffer replace(start,end,string);将start至end-1替换成string

void setCharAt(index,char);替换指定位置的字符

void setLength(len);将原字符串置为指定长度的字符串

4,查找。(查不到返回-1)

int indexOf(string); 返回指定子字符串在此字符串中第一次出现处的索引。

int indexOf(string,int fromIndex);从指定位置开始查找字符串

int lastIndexOf(string); 返回指定子字符串在此字符串中最右边出现处的索引。

int lastIndexOf(string,int fromIndex); 从指定的索引开始反向搜索

5,获取子串。

string substring(start); 返回start到结尾的子串

string substring(start,end); 返回start至end-1的子串

6,反转。

StringBuffer reverse();字符串反转

练习题

1,给定一个字符串数组。按照字典顺序进行从小到大的排序。

  {"nba","abc","cba","zz","qq","haha"}

public class StringTest_1 {

/**

 * @param args

 */

public static void main(String[] args) {

String[] arr = { "nba", "abc", "cba", "zz", "qq", "haha" };

printArray(arr);

sortString(arr);

printArray(arr);

}

public static void sortString(String[] arr) {

for (int i = 0; i < arr.length - 1; i++) {

for (int j = i + 1; j < arr.length; j++) {

if(arr[i].compareTo(arr[j])>0)//字符串比较用compareTo方法

swap(arr,i,j);

}

}

}

private static void swap(String[] arr, int i, int j) {

String temp = arr[i];

arr[i] = arr[j];

arr[j] = temp;

}

public static void printArray(String[] arr) {

System.out.print("[");

for (int i = 0; i < arr.length; i++) {

if (i != arr.length - 1)

System.out.print(arr[i] + ", ");

else

System.out.println(arr[i] + "]");

}

}

}

 2,一个子串在整串中出现的次数。

"nbaernbatynbauinbaopnba"

public class StringTest_2 {

/**

 * @param args

 */

public static void main(String[] args) {

String str = "nbaernbatnbaynbauinbaopnba";

String key = "nba";

int count = getKeyStringCount_2(str,key);

System.out.println("count="+count);

}

public static int getKeyStringCount_2(String str, String key) {

int count = 0;

int index = 0;

while((index = str.indexOf(key,index))!=-1){

index = index + key.length();

count++;

}

return count;

}

/**

 * 获取子串在整串中出现的次数。

 * @param str

 * @param key

 * @return

 */

public static int getKeyStringCount(String str, String key) {

//1,定义计数器。 

int count = 0;

//2,定义变量记录key出现的位置。

int index = 0;

while((index = str.indexOf(key))!=-1){

str = str.substring(index+key.length());

count++;

}

return count;

}

}

 3,两个字符串中最大相同的子串。

 "qwerabcdtyuiop"

 "xcabcdvbn"

public class StringTest_3 {

/**

 * @param args

 */

public static void main(String[] args) {

String s1 = "qwerabcdtyuiop";

String s2 = "xcabcdvbn";

String s = getMaxSubstring(s2, s1);

System.out.println("s=" + s);

}

/**

 * 获取最大子串

 * 

 * @param s1

 * @param s2

 * @return

 */

public static String getMaxSubstring(String s1, String s2) {

String max = null,min = null;

max = (s1.length()>s2.length())?s1:s2;

min = max.equals(s1)?s2:s1;

System.out.println("max="+max);

System.out.println("min="+min);

for (int i = 0; i < min.length(); i++) {

for(int a = 0,b = min.length()-i; b != min.length()+1; a++,b++){

String sub = min.substring(a, b);

// System.out.println(sub);

if(max.contains(sub))

return sub;

}

}

return null;

}

}

4,模拟一个trim功能一致的方法。去除字符串两端的空白 

public class StringTest_4 {

/**

 * @param args

 */

public static void main(String[] args) {

String s = "    ab   c     ";

s = myTrim(s);

System.out.println(s );

}

public static String myTrim(String s) {

int start = 0, end = s.length() - 1;

while (start <= end && s.charAt(start) == ' ') {

start++;

}

while (start <= end && s.charAt(end) == ' ') {

end--;

}

return s.substring(start, end + 1);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值