------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
一、String类中的方法及应用
1、String类在Java中代表字符串。
按照面向对象的的思想对字符串进行功能分类。
1、获取:1.1、获取字符串字符的个数(长度):int length()
1.2、根据位置获取字符。char charAt(int index)
1.3、根据字符获取在字符串中的第一次出现的位置: int indexOf(int ch)1.4、获取字符串中一部分字符串。也叫子串。String substring(int beginIndex,int endIndex)//包含begin,不含end
String substring (int beginIndex)
2、转换:
2.1、将字符串变成字符串数组(字符串的切割):String[] split(String regex)
2.2、将字符串变成字符数组:char tocharArray()
2.3、将字符串变成字节数组:byte[] getBytes()
2.4、将字符串中的字母转成大小写:String toUpperCase();String toLowerCase()
2.5、将字符串中的内容替换:String replace(char oldch ,char newch)或(String s1 ,String s2)
2.6、将字符串两端空格去掉:String trim();
2.7、将字符串进行连接:String cncat(string)
3、判断
3.1、字符串中是否包含指定字符串?booblean contains(string str)(s.contains("cc"))
4、比较:
s.compareTo("ABC")
示例:
package 练习2;
public class StringDemo
{
public static void main(String[]args)
{
/*
* 字符串转化为字符数组 char[] toCharArray();
* */
String s ="abc";
char[] c=s.toCharArray();
for(int i=0;i<s.length();i++)
{
System.out.println(c[i]);
}
/*
* 将字符串转化为字节数组byte【】 getBytes()
*
* */
byte[] B=s.getBytes();
for(int i=0;i<B.length;i++)
{
System.out.println(B[i]);
}
/*将字符串中的字母转成大小写;String toUpperCase();大写
* String toLowerCase();小写
*
*
* */
System.out.println(s.toUpperCase());
/*
* 将字符串中的内容进行替换;
* String replace (char oldch,char newch)
* String replace (String s1,String s2)
* */
System.out.println(s.replace("a","b"));
/*
* 6、将字符串两端的空格去除。String trim();
*
*
* */
System.out.println(" abc +".trim());
/*将字符串进行连接。String concat(string)
*
*
* */
System.out.println("abc".concat("dd"));
/*
* 字符串判断
* 1、两个字符串内容是否相同? boolean equals (object obj)
* boolean equalsIgnoreCase(string str);忽略大写比较字符串内容
* 2、字符串中是否包含指定字符串?
* boolean contains(string str)
* 3、字符串是否以指定的字符串开头和结尾。boolean startWith(string);
* boolean endWith(string)
*
*
* */
System.out.println(s.contains("a"));
System.out.println(s.startsWith("b"));
/*
* 字符串比较:
*
*
* */
System.out.println("a".compareTo("b"));
/*
*
*
* intern()对字符串池进行操作:
* */
String s1=new String("abc");
String s2=s1.intern();
System.out.println(s1==s2);
/*
* 将字符串变换成字符串数组
*
*
*
* */
System.out.println(s.substring(1,3));
String s4="a,b,g";
String[] s3=s4.split(",");
for(int i=0;i<s3.length;i++)
{
System.out.println(s3[i]);
}
}
}
public class StringTest
{
public static void main(String[]args)
{
String []arr={"nba","abc","cba","zz","qq","dd","hh"};
printArrary(arr);
sortArray(arr);
printArrary(arr);
}
public static void printArrary(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]+"]");
}
}
public static void sortArray(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)
{
swap(arr, i, j);
}
}
}
}
public static void swap(String[] arr, int i, int j) {
String temp = arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
示例(2)
package string练习;
/*
*
* 一个子串在整串中出现的次数;
* abdjjfjkfkflslsaasd
*
* 思路:
* 1、首先要确定字符串是否存在,如果存在获取其存在的位置,可以用indexof()完成,
* 2、如果找到了记录下该位置,并从剩余的子串里继续寻找,而剩余子串得起始位就是子串出现位置+子串长度;
* 3、以此类推,通过循环来完成,如果没有就返回-1,并对每次的次数用计数器记录。
* */
public class StringTest
{
public static void main(String[]args)
{
/*
* 创建字符串s,并初始化,并确定我们要找的子串key
* */
String s ="abdjjfjkfkflslsaasd";
String key="j";
int count =getCount(s,key);
System.out.println("count="+count);
}
public static int getCount(String s, String key) {
// TODO 自动生成的方法存根
int count=0;
int index=0;
while((index =s.indexOf(key))!=-1)
{
s=s.substring(index+key.length());
//index=index+key.length();
count++;
}
return count;
}
}
package string练习;
/**
* 3:两个字符串中最大相同的子串。
* qwerabcdtyuiop
* xcabcdvbn
*
* 思路:
* 1:既然取得最大子串,先看最短的的那个字符串是否在长的那个字符串中。如果存在最短那个字符串就是最大子串;
*
* 2:如果不是,那么将短的那个子串进行 长度递减的方式取子串,去长子串中判断是否存在,
* 如果存在,就结束,不存在继续寻找。
*
* */
public class StringTest3
{
public static void main(String[]args)
{
String s1="qwerabcdtyuiop";
String s2="xcabcdvbn";
String s=getMaxSubstring( s1, s2);
System.out.println("s="+s);
}
public static String getMaxSubstring( String s1,String s2)
{
for(int i=0;i<s2.length();i++)
{
for(int j=0, k=s2.length()-i;k!=s2.length()+1;j++,k++)
{
String sub=s2.substring(j,k);
//System.out.println(sub);
if(s1.contains(sub))
return sub;
}
}
return null;
}
}
package string练习;
/**模拟一个trim功能一致的方法,去去除字符串两端的空白
* 思路:
* 1:定义两个变量:
* 一个变量作为从头开始判断字符串空格的脚标,不断++;
* 一个变量作为从尾部开始判断字符串空格的脚标,不断--;
* 判断不是空格为止,取其之间的字符串即可。
*
* */
public class StringTest4
{
public static void main(String[]args)
{
String s=" +a ba + ";
s=myTrim(s);
System.out.println(s);
}
public static String myTrim(String s) {
// TODO 自动生成的方法存根
//定义变量并且初始化;
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);
三、StringBuffer
StringBuffer是字符串缓冲区,是一个容器。
特点:
长度是可变化的。
可以字节操作多个数据类型。
最终会通过toString方法变成字符串。
(1)存储
StringBuffer append():将指定数据作为参数添加到已有数据结尾处。
StringBuffer insert(index,数据):可以将数据插入到指定index位置。
(2)删除
StringBuffer delete(start,end):删除缓冲区中的数据,包含start,不包含end。
StringBuffer deleteCharAt(index):删除指定位置的字符。
(3)获取。
char charAt(int index)
int indexOf(String str)
int lastIndexOf(String str)
int length()
String substring(int start, int end)
(4)修改
StringBuffer replace(start,end,string);
void setCharAt(int index, char ch) ;
(5)反转
StringBuffer reverse();
(6)将缓冲区中指定数据存储到指定字符数组中。
void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
JDK1.5 版本之后出现了StringBuilder.
StringBuffer是线程同步。
StringBuilder是线程不同步。
以后开发,建议使用StringBuilder
升级三个因素:
(1)提高效率。
(2)简化书写。
(3)提高安全性。