Java之String的深入

一.String类

  1. 对String在内存存储方面的理解:
     第一:字符串一旦创建不可变。
     第二:双引号括起来的字符串存储在字符串常量池中。
     第三:字符串的比较必须使用equals方法。
     第四:String已经重写了toString()和equals()方法
    
  2. String的构造方法。
     String s = "abc";
     String s = new String("abc");
     String s = new String(byte数组);
     String s = new String(byte数组, 起始下标, 长度);
     String s = new String(char数组);
     String s = new String(char数组, 起始下标, 长度);
    

二.String的常用方法

1.public char charAt(int index)
返回指定索引处的值
例:

   String s="我是中国人" ;
   System.out.println(s.charAt(3));//国

2.public int compareTo(String anotherString)
(比较两个字符串的大小如果相等返回0 如果前面大返回1 后面大返回 -1)
例:

 int result="abcd".compareTo("abcd");
 System.out.println(result);//0
 int result1="abce".compareTo("abcd");
 System.out.println(result1);//1
 int result2="abcd".compareTo("abce");
 System.out.println(result2);//-1

返回:
3.public boolean contains(CharSequence s)//CharSequence 是一个接口
当且仅当此字符串包含指定的char值序列时才返回true。
例:

System.out.println("http\\www.baidu.com".contains("http"));
//true
System.out.println("http\\www.baidu.com".contains("https"));
//flase

4.public boolean endsWith(String suffix)
测试此字符串是否以指定的字符串结尾。
例:

System.out.println("http\\www.baidu.com".endsWith("om"));
//true      
System.out.println("http\\www.baidu.com".endsWith("cm"));
//flase

5.equals (字符串相等比较不忽略大小)返回值boolean
equals的重写:

public boolean equals(Object obj) {
	if(obj==null ||!(obj instanceof Animal))
    return false;
    if(this==obj)
    return true;
    Animal animal=(Animal)obj;
    return animal.no==this.no&&animal.name.equals(this.name)&&animal.birthday.equals(this.birthday);
   }

6.public boolean equalsIgnoreCase(String anotherString)
如果两个字符串的长度相同,并且两个字符串中的相应字符等于忽略大小写,则两个字符串被认为是相等的。
例:

 System.out.println("ABCD".equalsIgnoreCase("abcd"));//true

7.public byte[] getBytes(String charsetName)
将字符串对象转换成字节数组
例:

 byte [] bytes="abcde".getBytes();
    for(int i=0;i<bytes.length;i++) {
     System.out.println(bytes[i]);
}

8.public int indexOf(String str)
返回指定子字符串第一次出现在字符串内的索引。
例:

System.out.println("abcdefghhgfedcba".indexOf("abc"));//0

9.public boolean isEmpty()
isEmpty 判断某个字符串是否为空字符串 返回值为boolean (字符串的长度也可用length()判断长度)

例:

 System.out.println("abcdefghhgfedcba".isEmpty());//false

10.length() 判断字符串的长度 返回值为int

 System.out.println("abcdefghhgfedcba".length());//16

public int lastIndexOf(String str)
lastIndexOf 返回指定子字符串最后一次出现在字符串内的索引。

System.out.println("abcdefghhgfedcba".lastIndexOf("cba"));
//13

public String replace(CharSequence target,CharSequence replacement)将老的字符串的子串替换为一段新的字符串例:

String newString="abccdef".replace("bcc", "adde");
System.out.println(newString);//aaddedef
String newString1="ab=ccd=ef".replace("=", ";");
System.out.println(newString1);//ab;ccd;ef

13.将字符串按指定的字符进行拆分
例:

 String []newString1="ab=ccd=ef".split("=");//按"="进行拆分
 for(int i=0 ;i<newString1.length;i++) {
   System.out.println(newString1[i]);
 }

结果:

14.subString
public String substring(int beginIndex)
返回一个字符串,该字符串是此字符串的子字符串。 子字符串以指定索引处的字符开头,并扩展到该字符串的末尾。
例:

 String s="abcededfefafafa".substring(5);
 System.out.println(s);//edfefafafa

public String substring(int beginIndex,int endIndex)
返回一个字符串,该字符串是此字符串的子字符串。 子串开始于指定beginIndex并延伸到字符索引endIndex - 1 。 因此,子串的长度为endIndex-beginIndex
例:

String s="abcededfefafafa".substring(5,8);
System.out.println(s);//edf     前包后闭 [5,8)

15.public boolean startsWith(String prefix)
测试此字符串是否以指定的前缀开头

System.out.println("http\\www.baidu.com".startsWith("om"));
//false
System.out.println("http\\www.baidu.com".startsWith("http"));
//true

16.public char[] toCharArray()
将此字符串转换为新的字符数组。
例:

char[]s="我是中国人".toCharArray();
  for(int i=0;i<s.length;i++) {
   System.out.println(s[i]);
}

17.public String toLowerCase() 转换为小写
例:

 String s="abDcfeD".toLowerCase();
 System.out.println(s);//abdcfed

18.public String toupperCase() 转换为小写

String s="abDcfeD".toLowerCase();
System.out.println(s);//ABDCFED

19.public String trim()
去除字符串的前后空格

String s="  hello  word!  ".trim();
System.out.println(s);//hello  word!

20.valueOf
将非字符串转换为字符串

System.out.println(String.valueOf(true));//true
System.out.println(String.valueOf(100));//100
System.out.println(String.valueOf(3014));//3014
System.out.println(String.valueOf('a'));//a

三.String StringBuffer和StringBuilder

1.String为什么是不可变的?
String类中有一个byte[]数组 ,这个byte[]数组采用了final修饰,因为数组一旦创建长度不可变。并且被final修饰的引用一且指向某个对象之后 ,不可再指向其它对象,所以String是不可变的!
"abc"无法变成"abcd ”

2、StringBuilder/StringBuffer为什么是可变的呢?
StringBuffer/StringBuilder内部实际上是一个byte[ ]数组,这个byte[ ]数组没有被final修饰, StringBuffer/StringBuilder的初始化容量为16,当存满之后会进行扩容,底层调用了数组拷贝的方法
System. arraycopy()…是这样扩容的。所以stringBuilder/StringBuffer适合于使用字符串的频繁拼接操作。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
命令模式是一种行为设计模式,它将请求和实现请求的操作对象解耦,以便请求的对象不需要知道实现请求的对象是谁,也不需要知道请求是如何被实现的。在命令模式,请求被封装为一个对象,这个对象包含了要被执行的操作及其参数,以及实现该操作的对象。这样,请求的对象只需要发送请求,而不必关心请求的实现细节。 命令模式包含以下几个角色: - Command(命令):定义了一个命令接口,包含了执行命令的方法execute()。 - ConcreteCommand(具体命令):实现了Command接口,包含了具体的执行逻辑。 - Invoker(调用者):包含了一个命令对象,并在需要的时候调用命令对象的execute()方法。 - Receiver(接收者):真正执行命令的对象。 下面是一个简单的 Java 示例代码: ```java // Command 接口 public interface Command { void execute(); } // 具体命令类 public class ConcreteCommand implements Command { private Receiver receiver; public ConcreteCommand(Receiver receiver) { this.receiver = receiver; } @Override public void execute() { receiver.action(); } } // 接收者类 public class Receiver { public void action() { System.out.println("接收者执行命令"); } } // 调用者类 public class Invoker { private Command command; public Invoker(Command command) { this.command = command; } public void setCommand(Command command) { this.command = command; } public void executeCommand() { command.execute(); } } // 测试类 public class Test { public static void main(String[] args) { Receiver receiver = new Receiver(); Command command = new ConcreteCommand(receiver); Invoker invoker = new Invoker(command); invoker.executeCommand(); } } ``` 在上面的示例代码,Command 接口定义了一个 execute() 方法,具体命令类 ConcreteCommand 实现了该接口,并在 execute() 方法调用了接收者类 Receiver 的 action() 方法。调用者类 Invoker 包含了一个命令对象,并在需要的时候调用命令对象的 execute() 方法,从而实现了命令的调用。 总之,命令模式可以将请求发送者和请求接收者解耦,使得请求发送者不需要知道请求接收者的实现细节,同时也方便对请求进行撤销、恢复等操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值