java-String-StringBuffer
一 String
1.1 == 和 equal()
System.out.println("-------两个内容相同,创建方式不同的字符串,面试题--------");
String s3 = "abc";
String s4 = new String("abc"); //s3和s4有什么不同呢?
/*
* s3创建,在内存中只有一个对象。
*
* s4创建,在内存中有两个对象。
*/ System.out.println(s3==s4);//false
// 因为String复写了equals方法,
// 建立字符串自己的判断相同的依据。通过字符串对象中的内容来判断的。
System.out.println(s3.equals(s4));//true,
1.2 常见方法及查找的方法
1,字符串是一个对象,那么它的方法必然时围绕操作这个对象的数据而定义的。
2,你认为字符串中有哪些功能呢?
2.1 有多少个字符?
int length()
2.2 字符的位置。
int indexOf(ch,fromIndex);
2.3 获取指定位置上的字符。
char charAt(int)
2.4 获取部分字符串。
String substring(int start,int end);
String str = "abada";
// System.out.println("length="+str.length());
int len = str.length();
System.out.println("len="+len); //------a字母出现的位置------
int index = str.indexOf('a');//获取的是a字符第一次出现的位置。
System.out.println("index="+index);
//------第二个a字母出现的位置------ int index1 = str.indexOf('a',index+);
System.out.println("index1="+index1);
//------第三个a字母出现的位置------
int index2 = str.indexOf('a',index1+);
System.out.println("index2="+index2); str = "sdfghjkl;wertyuiop[sdfghjkla;";
int index3 = str.lastIndexOf('m');//如果要找的字符不存在,-1
System.out.println("index3="+index3); //----------获取指定位置上字符。---------------
str = "itcast";
char ch = str.charAt();//不存在角标会发生StringIndexOutOfBoundsException
System.out.println("ch="+ch); //------------获取部分字符串----------------------
String s = str.substring(, );//包含头,不包含尾。
System.out.println("s="+s);
1.3 String 练习
* String方法查找练习。
* 1,字符串是否以指定字符串开头。结尾同理。
* boolean startsWith(string)
* boolean endsWith(string)
*
* 2,字符串中是否包含另一个字符串。
* boolean contains(string);
* int indexOf(string)//如果返回-1,表示不存在。
*
* 3,字符串中另一个字符串出现的位置。
* int indexOf(string)
* 4,将字符串中指定的字符串替换成另一个字符串。
* String replace(oldstring , newstring)
*
* 5,字符串如何比较大小?@
*
* 6,将字符串转成一个字符数组。或者字节数组。
* toCharArray()
* getBytes()
* 7,将字母字符串转成大写的字母字符串。
* toUpperCase()
* toLowerCase();
* 8,将字符串按照指定的方式分解成多个字符串, "lisi,wangwu,zhaoliu"获取三个姓名。
* String[] split(string);
//
String str = "StringDemo.java";
boolean b1 = str.startsWith("Demo");//false
//
boolean b2 = str.contains("Demo");//CharSequence x = "Demo";//true
//
String s = str.replace("haha", "Test");//没有被替换内容时,结果是原串儿。
System.out.println("s="+s);
//
char[] chs = str.toCharArray();
byte[] bytes = str.getBytes();
//
String upperString = str.toUpperCase(); //
str = "lisi,wangwu,zhaoliu";
String[] names = str.split(",");
for (int i = ; i < names.length; i++) {
System.out.println(names[i]);
} //5,字符串如何比较大小?
int result = "ab".compareTo("ab");//只要想让对象具备比较大小的功能只需实现Comparable接口。
System.out.println("result:"+result);
1.4 comparable
package test; class Person implements Comparable {
private String name ;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public Person() {
super();
}
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
} public int compareTo(Object o) {
if(!(o instanceof Person))
throw new RuntimeException("o");
Person p = (Person)o;
return this.age - p.age;
} }
1.5 练习
1 字符串数组排序
/**
* 字符串数组
* 思路:
* 1,曾经玩过int[]排序,选择,冒泡。
* 2,字符串排序同理。
* 3,for嵌套循环。
* 4,循环中进行元素的大小比较,满足条件位置置换。
* @param strs
*/
public static void sortString(String[] strs) { for (int i = ; i < strs.length - ; i++) {
for (int j = i + ; j < strs.length; j++) {
if(strs[i].compareTo(strs[j])>){//对象比较用方法。compareTo。
swap(strs,i,j);
}
}
}
// Arrays.sort(strs); }
/*
* 数组元素位置置换。
*/
private static void swap(String[] strs, int i, int j) {
String temp = strs[i];
strs[i] = strs[j];
strs[j] = temp; }
2 字符串出现的次数
/*
*
* 案例二:
* "witcasteritcasttyuiitcastodfghjitcast"有几个itcast
*
* 思路:
* 1,无非就是在一个字符串中查找另一个字符串。indexOf。
* 2,查找到第一次出现的指定字符串后,如何查找第二个呢?
* 3,无需在从头开始,只要从第一次出现的位置+要找的字符串的长度的位置开始向后查找下一个第一次出现的位置即可。
* 4,当返回的位置是-1时,查找结束。
*/
String str = "witcasteritcasttyuiitcastodfghjitcast";
String key = "itcast"; int count = getKeyCount(str,key);
System.out.println("count="+count); /**
* 获取key在str中出现次数。
* @param str
* @param key
* @return
*/
public static int getKeyCount(String str, String key) { //1,定义变量。记录每一次找到的key的位置。
int index = ;
//2,定义变量,记录出现的次数。
int count = ; //3,定义循环。只要索引到的位置不是-1,继续查找。
while((index = str.indexOf(key,index))!=-){ //每循环一次,就要明确下一次查找的起始位置。
index = index + key.length(); //每查找一次,count自增。
count++;
}
return count;
}
3 按照长度递减获取字符串
* 案例三: "itcast_sh"要求,将该字符串按照长度由长到短打印出来。 itcast_sh itcast_s tcast_sh
*/
String str = "itcast";
printStringByLength(str); } public static void printStringByLength(String str) { // 1,通过分析,发现是for嵌套循环。
for (int i = ; i < str.length(); i++) { for (int start = , end = str.length() - i; end <= str.length(); start++, end++) { //根据start,end截取字符串。
String temp = str.substring(start, end);
System.out.println(temp);
} } }
二 StringBuffer
2.1 使用
/*
* StringBuffer:
* 1,是一个字符串缓冲区,其实就是一个容器。
* 2,长度是可变,任意类型都行。注意:是将任意数据都转成字符串进行存储。
* 3,容器对象提供很多对容器中数据的操作功能,比如:添加,删除,查找,修改。
* 4,必须所有的数据最终变成一个字符串。
* 和数组最大的不同就是:数组存储完可以单独操作每一个元素,每一个元素都是独立的。
* 字符串缓冲区,所有存储的元素都被转成字符串,而且最后拼成了一个大的字符串。
*
* 可变长度数组的原理:新建数组,并复制数组元素到新数组中。
*/
//1,创建一个字符串缓冲区对象。用于存储数据。
StringBuffer sb = new StringBuffer(); //2,添加数据。不断的添加数据后,要对缓冲区的最后的数据进行操作,必须转成字符串才可以。
String str = sb.append(true).append("hehe").toString();
// sb.append("haha"); // sb.insert(2, "it");//插入 // sb.delete(1, 4);//删除 // sb.replace(1, 4, "cast");
// sb.setLength(2);
System.out.println(sb); // String s = "a"+5+'c';//原理就是以下这句
// s = new StringBuffer().append("a").append(5).append('c').toString();
2.2 练习
package cn.itcast.api.stringbuffer; public class StringBufferTest { /**
* @param args
*/
public static void main(String[] args) { /*
* int[] arr = {34,12,89,68};
* 将一个int[]中元素转成字符串 格式 [34,12,89,68]
*/
int[] arr = {,,,};
String str = toString_2(arr);
System.out.println(str);
} /**
* 缓冲区的应用:无论多少数据,什么类型都不重要,只要最终变成字符串就可以StringBuffer这个容器。
* @param arr
* @return
*/
public static String toString_2(int[] arr) {
//1,创建缓冲区。
StringBuffer sb = new StringBuffer(); sb.append("[");
for (int i = ; i < arr.length; i++) {
if(i!=arr.length-){
sb.append(arr[i]+",");
}else{
sb.append(arr[i]+"]");
}
} return sb.toString();
} public static String toString(int[] arr) { //用字符串连接。
String str = "[";
for (int i = ; i < arr.length; i++) {
if(i!=arr.length-){
str+=arr[i]+",";
}else{
str+=arr[i]+"]";
}
}
return str;
} }
2.3 Stringbuilder 和Stringbuffer区别
package cn.itcast.api.stringbuffer; public class StringBuilderDemo { /**
* @param args
*/
public static void main(String[] args) { /*
* StringBuilder和StringBuffer的区别。
* StringBuilder:非同步的。单线程访问效率高。
* StringBuffer:同步的,多线程访问安全。
*
*/ }
}
/*
synchronized append(); synchronized delete(); synchronized insert(); */
java-String-StringBuffer的更多相关文章
- JAVA String,StringBuffer与StringBuilder的区别??
String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要性能 ...
- Java String StringBuffer StringBuilder
String 字符串常量存储在常量区,每次追加操作会创建新的对象: StringBuffer 字符串变量 线程安全 在堆上创建,每次追加操作在原对象上进行操作: 速度 StringBuffer ...
- Java String, StringBuffer和StringBuilder实例
1- 分层继承2- 可变和不可变的概念3- String3.1- 字符串是一个非常特殊的类3.2- String 字面值 vs. String对象3.3- String的方法3.3.1- length ...
- java String,StringBuffer和StringBulder学习笔记
1.String:不可改变的Unicode字符序列. 池化思想,把需要共享的数据放在池中,用一个存储区域来存放一些公用资源以减少存储空间的开销. 在String类中,以字面值创建时,回到java方法空 ...
- java ——String , StringBuffer, StringBuilder类
一.String类概述 1.String对象一旦创建就不能改变. 2.字符串常量池. 字符串常量池的特点:池中有则直接使用,池中没有则创建新的字符串常量. 例1: “==” 比较两个对象是否引用同一 ...
- java String, StringBuffer ,StringBulider 区别
1. String 是不可变的(immutable): 创建后不能修改: 2. StringBuffer 线程安全的,可变字符串: 3. StringBuilder 线程不安全,所以性能比较高
- Java中String,StringBuffer与StringBuilder的差别
String 字符串常量: StringBuffer 字符串变量〈缓冲区〉(线程安全): StringBuilder 字符串变量〈缓冲区〉(非线程安全): 简要的说, String 类型和 Strin ...
- 从源代码的角度聊聊java中StringBuffer、StringBuilder、String中的字符串拼接
长久以来,我们被教导字符串的连接最好用StringBuffer.StringBuilder,但是我们却不知道这两者之间的区别.跟字符串相关的一些方法中总是有CharSequence.StringBuf ...
- Java String字符串/==和equals区别,str。toCharAt(),getBytes,indexOf过滤存在字符,trim()/String与StringBuffer多线程安全/StringBuilder单线程—— 14.0
课程概要 String 字符串 String字符串常用方法 StringBuffer StringBuilder String字符串: 1.实例化String对象 直接赋值 String str=& ...
- java中String,StringBuffer,StringBuilder之间的区别
文章转载自:http://www.cnblogs.com/frankliiu-java/archive/2010/07/05/1771537.html String是固定长度的字符串,如果要发生变化必 ...
随机推荐
- DuiLib学习笔记3.颜色探究
在前面两篇日志已经能使用xml了.今天准备好好的折腾一番,结果在颜色上却掉坑里了. 起初我在ps里取颜色为0104ff 这里01为R,04为G,ff为B 在控件的属性里有这样一个属性bkcolor=& ...
- 洛谷 P3120 [USACO15FEB]牛跳房子(金)Cow Hopscotch (Gold)
P3120 [USACO15FEB]牛跳房子(金)Cow Hopscotch (Gold) 就像人类喜欢跳格子游戏一样,FJ的奶牛们发明了一种新的跳格子游戏.虽然这种接近一吨的笨拙的动物玩跳格子游戏几 ...
- bean的使用
前言 Spring最基础的功能就是一个bean工厂,所以本文讲解的是Spring生成bean的种种方法及细节,Spring配置文件的名字是bean.xml,定义几个类: 一个Person类: publ ...
- RedHat服务器搭建Jenkins
- <每日一题>题目8:文件备份V1.0
import os #备份文件的路径 file_address = input("输入需要备份文件所在的路径:") os.chdir(file_address) #备份文件命名 f ...
- spring boot 项目添加maven依赖时provided
spring boot 项目是自带tomcat 的,但是我们有时候是需要把项目打包成war 然后放到独立的tomcat中运行的,这个时候我们就需要将它自带的tomcat给排除开,这时候我们就可以使用& ...
- NoSQL 列族数据库
- Harvest of Apples (HDU多校第四场 B) (HDU 6333 ) 莫队 + 组合数 + 逆元
题意大致是有n个苹果,问你最多拿走m个苹果有多少种拿法.题目非常简单,就是求C(n,0)+...+C(n,m)的组合数的和,但是询问足足有1e5个,然后n,m都是1e5的范围,直接暴力的话肯定时间炸到 ...
- js的相关距离
js的相关距离 一.dom对象的距离 ---dom.style.width : 对象本身的内容宽度(这里必须是内联样式中的width,带px)(content) ---dom.style.height ...
- vue.js_12_vue的watch和computed
1.watch用来监测指定Vue实例上的数据变动. watch主要用于监控vue实例的变化,它监控的变量当然必须在data里面声明才可以,它可以监控一个变量,也可以是一个对象. 1.>使用wat ...