------
Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
String
String类代表字符串。Java程序中的所有字符串字面值(如”abc”)都作为此类的实例实现。
字符串是常量;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为String对象时不可变得,所有可以共享。例如:
String str = “abc”;等效于char data[] = {‘a’,’b’,’c’} String str = new String(data);
String s1 = “abc”;
String s2 = new String(“abc”);
String s3 = “abc”
s 1 = =s2 flase因为s1在内存中只有一个对象,而s2在内存中有两个对象
s1.equals(s2) true String类复写了Object中的equals方法,只要它们值相同就返回true
s1 ==s3 true
练习一:出去一个字符串两端的空格
代码:
package com.itheima;
public class StringTrDemo {
//测试类
public static void main(String[] args) {
//给定字符串
String str = " dffd ";
//输出
System.out.println(str);
//去空格
str = myTrim(str);
//输出去空格后的字符串
System.out.println(str);
}
public static String myTrim(String str){
//定义角标
int start = 0, end = str.length()-1;
// 找出从0角标位开始第一个非空的角标
while(start <= end&&str.charAt(start) == ' '){
start++;
}
// 找出从最末角标位开始第一个非空的角标
while(start <= end&&str.charAt(end) ==' ' ){
end--;
}
//截取去过空格的字符串
str = str.substring(start,end+1);
//返回结果
return str;
}
}
反转字符串
class ReverseString {
//指定开始结束位置反转
public String reverseString(String str, int start, int end) {
// 将字符串转化为数组
char[] ch = str.toCharArray();
// 将数组反转
reverse(ch, start, end);
//将反转后的数组转换为字符串返回
return new String(ch);
}
//头尾反转
public String reverseString(String str){
return reverseString(str,1,str.length());
}
//将数组反转
private char[] reverse(char[] ch, int start, int end) {
for (int x = start-1, y = end-1; x < y; x++, y--) {
swap(ch, x, y);
}
return ch;
}
//交换数组中元素位置
private void swap(char[] ch, int x, int y) {
char temp = ch[x];
ch[x] = ch[y];
ch[y] = temp;
}
}
//测试类
public class ReverseStringDemo {
public static void main(String[] args) {
ReverseString rs = new ReverseString();
String str = "jlsdfjlsjf";
System.out.println("反转前"+str);
str = rs.reverseString(str);
System.out.println("反转后"+str);
str = rs.reverseString(str, 1,5);
System.out.println("再次反转后"+str);
}
}
获取一个字符串在另一个字符串中出现的次数
代码:
/*思路:1,定义一个计数器
2,获取要找到字符串第一次出现的位置
3,从第一出现的位置之后的字符串中再找
4,计数器加一
* */
//测试类
public class StringCountDemo {
public static void main(String[] args) {
String str = "kkdjfkkdkkjiekkddfdfkk";
int count1 = StringCount.subStringCount(str, "kk");
int count2 = StringCount.subStringCount_2(str, "kk");
System.out.println("count1= "+count1);
System.out.println("count2= "+count2);
}
}
class StringCount{
public static int subStringCount(String str , String key){
//计数器
int count = 0 ;
//起始索引
int index = 0;
while((index = str.indexOf(key)) != -1){
//将索引放到第一出现可以的位置之后
index = index + key.length();
//从index处截取字符串
str = str.substring(index);
//计数器加一
count++;
}
return count;
}
public static int subStringCount_2(String str, String key){
//计数器
int count = 0;
//索引
int index = 0;
while((index = str.indexOf(key,index)) != -1){
//第一次找到key位置之后从这个位置之后的索引再开始找
index = index + key.length();
//计数器加一
count++;
}
return count;
}
}
练习四,获取两个字符串中最大的相同子串
/*思路:
* 1,将短的字符串按照长度递减的方式获得
* 2,比较长的字符串是否包含此字串,如果包含,则就找到了相同的最大字串
* */
//测试类
public class MaxSubStringDemo {
public static void main(String[] args) {
String str1 = "jdfsljlljdflejf";
String str2 = "jdfsljllfddf";
String str =MaxSubString.MaxSubString(str1, str2);
System.out.println(str);
}
}
class MaxSubString{
public static String MaxSubString(String str1,String str2){
//获取所传两个参数中较长的字符串
String max = str1.length()>= str2.length()?str1:str2;
//获取所传两个参数中较短的字符串
String min = max == str1?str2:str1;
for(int x = 0 ; x < min.length(); x++){
for(int y = 0, z = min.length()-x;z != min.length()+1;y++,z++){
//截取较短字符串的字串
String subStr = min.substring(y,z);
//判断是否包含
if(max.contains(subStr)){
//如果包含,就返回此字串
return subStr;
}
}
}
//如果不包含返回空字符串
return "" ;
}
}