一 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的更多相关文章

  1. JAVA String,StringBuffer与StringBuilder的区别??

    String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要性能 ...

  2. Java String StringBuffer StringBuilder

    String  字符串常量存储在常量区,每次追加操作会创建新的对象: StringBuffer  字符串变量  线程安全 在堆上创建,每次追加操作在原对象上进行操作:  速度 StringBuffer ...

  3. Java String, StringBuffer和StringBuilder实例

    1- 分层继承2- 可变和不可变的概念3- String3.1- 字符串是一个非常特殊的类3.2- String 字面值 vs. String对象3.3- String的方法3.3.1- length ...

  4. java String,StringBuffer和StringBulder学习笔记

    1.String:不可改变的Unicode字符序列. 池化思想,把需要共享的数据放在池中,用一个存储区域来存放一些公用资源以减少存储空间的开销. 在String类中,以字面值创建时,回到java方法空 ...

  5. java ——String , StringBuffer, StringBuilder类

    一.String类概述 1.String对象一旦创建就不能改变. 2.字符串常量池. 字符串常量池的特点:池中有则直接使用,池中没有则创建新的字符串常量. 例1: “==”  比较两个对象是否引用同一 ...

  6. java String, StringBuffer ,StringBulider 区别

    1. String 是不可变的(immutable): 创建后不能修改: 2. StringBuffer 线程安全的,可变字符串: 3. StringBuilder 线程不安全,所以性能比较高

  7. Java中String,StringBuffer与StringBuilder的差别

    String 字符串常量: StringBuffer 字符串变量〈缓冲区〉(线程安全): StringBuilder 字符串变量〈缓冲区〉(非线程安全): 简要的说, String 类型和 Strin ...

  8. 从源代码的角度聊聊java中StringBuffer、StringBuilder、String中的字符串拼接

    长久以来,我们被教导字符串的连接最好用StringBuffer.StringBuilder,但是我们却不知道这两者之间的区别.跟字符串相关的一些方法中总是有CharSequence.StringBuf ...

  9. Java String字符串/==和equals区别,str。toCharAt(),getBytes,indexOf过滤存在字符,trim()/String与StringBuffer多线程安全/StringBuilder单线程—— 14.0

    课程概要 String 字符串 String字符串常用方法 StringBuffer StringBuilder String字符串: 1.实例化String对象 直接赋值  String str=& ...

  10. java中String,StringBuffer,StringBuilder之间的区别

    文章转载自:http://www.cnblogs.com/frankliiu-java/archive/2010/07/05/1771537.html String是固定长度的字符串,如果要发生变化必 ...

随机推荐

  1. 洛谷P4550 【收集邮票】

    题目链接: 神仙题QAQ 题目分析: 概率期望题是不可能会的,一辈子都不可能会的QAQ 这个题也太仙了 首先明确一下题意里面我感觉没太说清楚的地方,这里是抽到第\(i\)次要\(i\)元钱,不是抽到第 ...

  2. log4j的使用及与mybatis应用

    log4j 输出级别 fatal(致命信息)>error(错误信息)>warn(警告信息)>info(普通信息)>debug(调试信息)>all(所有) log4j.pr ...

  3. 【流畅的python】16 - 协程

    yield 产生是产生值给调用方 让步是暂停生成器,同时让步也可以作为流程控制手段 yield item 上面这行代码会产出一个值.提供给next(...)的调用方.此外还会做出让步,暂停执行生成器, ...

  4. [转]WPF焦点概述

    WPF 中,有两个与焦点有关的主要概念:键盘焦点和逻辑焦点. 键盘焦点指接收键盘输入的元素,而逻辑焦点指焦点范围中具有焦点的元素. 本概述将详细介绍这些概念. 理解这些概念之间的区别对于创建具有可以获 ...

  5. Gym - 100543L

    Gym - 100543Lhttps://vjudge.net/problem/153854/origin区间dp,要从区间长度为1开始dp #include<iostream> #inc ...

  6. 使用由 Python 编写的 lxml 实现高性能 XML 解析

    lxml 简介 Python 从来不出现 XML 库短缺的情况.从 2.0 版本开始,它就附带了 xml.dom.minidom 和相关的 pulldom 以及 Simple API for XML ...

  7. windows下bat批量处理启动exe

    新建文本文档,start.dat start "" "D:\QQ\anzhaung\Bin\QQ.exe" 启动QQ cd ./当前文件夹下,../上一文件夹下 ...

  8. sas正则式之prxparen

    sas正则式之prxparen 今天还是要继续正则式的内容,这周的内容是prxparen函数,这个函数我个人觉得特别有用,是因为他和"|"结合使用可以同时容纳很多种情况的字符串. ...

  9. Harbor任意管理员注册漏洞复现

    1. 简介 Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,通过添加一些企业必需的功能特性,例如安全.标识和管理等,扩展了开源Docker Distribution. ...

  10. 【MFC】MFC文本框中显示浮点数

    CString strNumber; strNumber.Format("%0.2f",tim.getTimeMilli()); SetDlgItemText(IDC_TIME_U ...