String部分学习笔记


public class String_Object {
public static void main(String[] args) {
String s1 = "abc";//s1是一个类类型变量,“abc”是一个对象而且其值不会改变
System.out.println(s1);//这里输出的是abc
s1 = "hello world";//s1指向的对象变了 但是对象"abc"并没有变
System.out.println(s1);//这里输出的是hello world
}
}
public class StringDemo {
public static void main(String[] args) {
String s1 = new String("abc");
String s2="abc";
System.out.println("=="+(s1==s2));
System.out.println("equals"+s1.equals(s2));
}
}
//输出的结果:
//==false
//equalstrue

输出结果为:

s1.equals(s2)true---
s1.equals(s3)true
s1==s2false
s1==s3true

============================================================================================
判断
1.字符串是否包含一个字串。
boolean contains(str):
特殊之处:indexOf(str):可以索引str第一次出现的位置,如果返回-1.表示该str不在字符串中
存在
2.字符串中是否有内容 boolean isEmpty
3.字符串是否以指定内容开头 boolean startsWith()
4.字符串是否是以指定内容结尾 boolean endsWith()

package Judge;

public class JudgeStringMethod {
public static void main(String[] args) {
method_is("arrDemo.java");
}

public static void method_is(String str)
{
//判断文件名是否是arr单词开头
boolean flagArr = str.startsWith("arr");
//判断文件名是否以.java结束
boolean flagJava = str.endsWith(".java");
//判断文件名中是否包含Demo
boolean flagDemo = str.contains("Demo");
System.out.print(flagArr);
System.out.print(flagJava);
System.out.print(flagDemo);
}
}


==============================================================================
转换

package Change;
/**转换
* 1.将字符数组转成字符串
* 构造函数:String(char[])
* String(char[],offset,count):将字符数组中的一部分转成字符串
* 静态方法:static String copyVlaueOf(char[])
* static copyValueOf(char []data,int offset,int count)
* static String valueOf(char[])
* 2.将字符串转成字符数组**
* char[] toCharArray();
*
* 3.将字节数组转成字符串
* String(byte[])
* String(byte[],offset,count)将字节数组中的一部分转成字符串
* 4.将字符串转成字节数组**
* byte[] getBytes();
* 5.将基本数据类型转成字符串
* static String valueOf(int)
* static String valueOf(double)
* 3+""跟 String.valueOf(3)效果一样
*
* 特殊:字符串和字节数组在转换的过程中,是可以指定编码表的
* @author bing
*
*/
public class TestMain {
public static void main(String[] args) {
method_Trans();
String s;
StringTOChar("abcdefgh");
}

public static void method_Trans()
{
char []arr = {'a','b','c','d','e'};
String s = new String(arr);//用构造函数直接将字符数组转成字符串对象
String s1 = new String(arr,1,3);//s1是从字符数组arr第1个元素截取3个元素
System.out.println(s);
System.out.println(s1);
System.out.println(arr);//直接打印字符数组时,会将字符数组全部内容打出
System.out.println("=====================================================");


}
public static void StringTOChar(String s)
{
char arr[] = s.toCharArray();
System.out.println("数组长度为"+s.length());
for(int i=0;i<s.length();i++)
{
System.out.println("char["+i+"]="+arr[i]);
}
}
}


=====================================================================================
练习一

/**
* 模拟一个trim方法,去除字符串两端的空格
* 思路 1,判断字符串第一个位置是否是空格,如果是继续向下判断,直到不是空格为止
* 结尾处判断空格也是如此
* 2,当开始和结尾都不是空格的时候,就是要获取的字符串
* @author bing
*
*/
public class trim {
public static void main(String[] args) {
String ss= " sfasf ";
trim(ss);
}
public static void trim(String s)
{
int star =0, end = s.length()-1;

while(s.charAt(star)==' '&& star<=end)
{
star++;
}

while(s.charAt(end)==' '&& end>=star)
{
end--;
}
s= s.substring(star, end+1);
System.out.println(s);
}
}

=====================================================================================
练习二

/**
* 将字符串反转输出
* @author bing
*
*/
public class Flip {
public static void main(String[] args) {
flip("123456789");
}
public static void flip(String s)
{
char arr[] = s.toCharArray();
int tt= s.length();

for(int i = 0,j=s.length()-1;i<=j;i++,j--)
{
char c;
c=arr[i];arr[i]=arr[j];arr[j]=c;
}
s=String.copyValueOf(arr);
System.out.println(s);
}
}

===========================================================================================
练习三

/**
* 获取一个字符串在另一个字符串中出现的次数
* @author bing
*
*/
public class CountContain {
public static void main(String[] args) {
count_Contain("abcljlkjabclkjljabc","abc");
count_Contain2("abcljlkjabclkjljabc","abc");
}
public static int count_Contain(String s,String s_IN)
{int x=0;
while(s.contains(s_IN))
{
int i=s.indexOf(s_IN);
s=s.substring(i+s_IN.length());
x++;
}
System.out.println(x);
return 0;
}
public static int count_Contain2(String str,String key)
{
int index = 0;
int count = 0;
while(( str.indexOf(key, index))!=-1)
{
index =str.indexOf(key, index);
index+=key.length();
count++;
}
System.out.println(key+"出现的次数为:"+ count);
return count;
}
}


===========================================================================================
练习四


/**
* 获取两个字符串中的最大共同子串
* 思路:1,将短的那个字符串按照长度递减的方式获取到
* 2,将每获取的子串去长串中判断是否包含
* @author bing
*
*/
public class CountMaxContain {
public static void main(String[] args) {
MaxContain("sadfashellosdfasf", "slhellofgh");
}
public static void MaxContain(String longStr,String shortStr)
{
boolean flag=false;
for(int x = 0;x<shortStr.length();x++)
{
for(int i=0,j=shortStr.length()-x;j<=shortStr.length();i++,j++)
{
String temp = shortStr.substring(i, j);
if(longStr.contains(temp))
{
System.out.println("找到"+temp);
flag=true;
break;
}
}
if(flag)break;
}
}
}


===========================================================================================
StringBuffer的使用,补充StringBuilder

package StringBuffer.base;
/**
* StringBuffer 是一个容器 可以CRUD,长度可以变化,可以直接操作多个数据类型
* 1.存储
* StringBuffer append():将指定参数添加到已有的数据结尾处
* StringBuffer insert(index,数据);
* 2.删除
* StringBuffer delete(int start, int end)
移除此序列的子字符串中的字符。 删除缓冲区中的数据包含start,不包含end
StringBuffer deleteCharAt(int index)
移除此序列指定位置的 char。
3.获取
char charAt(int index) 返回此序列中指定索引处的 char 值。
int indexOf(String str)
int lastIndexOf(String str)
String substring(int start)
4.修改
StringBuffer replace(int start, int end, String str)使用给定 String 中的字符替换此序列的子字符串中的字符。
void setCharAt(int index, char ch) 将给定索引处的字符设置为 ch。
5.反转 StringBuffer reverse() 将此字符序列用其反转形式取代。
6.转数组 public void getChars(int srcBegin,int srcEnd,char[] dst,int dstBegin)

JDK1.5之后出现了StringBuilder
StringBuffer是线程同步的 StringBuilder是线程不同步的

* @author bing
*
*/
public class StringBufferBase {
public static void main(String[] args) {
//method_update();
metod_getArray(new StringBuffer("abcdefgh"));
}

public static void metod_getArray(StringBuffer sb)//转字符数组
{
char chs[] = new char[sb.length()];
sb.getChars(1, 3, chs, 2);
for(int i = 0;i<chs.length;i++)
{
sop("ch["+i+"]="+chs[i]);
}
}

public static void method_update()//更新
{
StringBuffer sb = new StringBuffer("abcde");
sb.replace(1, 4, "java");
sop(sb.toString());
}

public static void method_del()//删除
{
StringBuffer sb = new StringBuffer("abcde");
//sb.delete(1, 3);//从一删除到3
//sb.delete(0, sb.length());//清空缓冲区
sb.deleteCharAt(0);//删除一个指定位置的字符
sop(sb.toString());
}

public static void method_add()//添加
{
StringBuffer sb = new StringBuffer();
//StringBuffer sb1 = sb.append(11);
sb.append(32).append("fasfdas").append(true).append(new Object());
//方法调用链 就是方法运行之后返回来的还是这个类型的对象
//sop(sb1.toString());
sb.insert(1, "hello");
sop(sb.toString());
}

public static void sop(String str)
{
System.out.println(str);
}
}




===================================================================================
基本数据类型包装类


package IntegerDemo;
/**
* 基本数据类型对象包装类
* 最常用的的作用是基本数据类型和字符串类型的相互转换
* 基本数据类型转成字符串
* 1.基本数据类型 + “”
* 2.基本数据类型.toString(基本数据类型值)
* 如 Integer.toString(34)
* 字符串转成基本数据类型
* 基本数据类型包装类.pars类型(类型值)
* xxx a = xxx.parsexxx(String);
* int a = Integer.parseInt("123");
* double b = Double.parsDouble("12.34");
* boolean b = Boolean.parsBoolean("true");
* 上面是静态方法 下面是动态方法
* Integer i = new Integer("123");//利用构造函数将字符串转成int型
* int num = i.intValue();
* 十进制转成其他进制
* toBinaryString();
* toHexString()
* toOctalSring()
* 其他进制转成十进制
* public static int parseInt(String s, int radix) throws NumberFormatException
* @author bing
*
*/
public class IntegerDemo {
public static void main(String[] args) {
//整数类型的最大值
sop("int max:"+Integer.MAX_VALUE);
//将一个字符串转成整数
String s = "1234";
int t = Integer.parseInt(s);
t++;
System.out.println(t);
sop(Integer.toBinaryString(t));
int i = Integer.parseInt("110",2);
sop(Integer.toString(i));
Integer in = new Integer("123");
System.out.println(in+1);
int ni = in.intValue();
System.out.println(ni);

}

public static void sop(String str)
{
System.out.println(str);
}
}


===========================================================================================
JDK1.5的新特性

package IntegerDemo;
/**
* JDK1.5后出现的新特性
* @author bing
*
*/
public class IntegerDemo2 {
public static void main(String[] args) {
Integer x = new Integer(4);
Integer x1 = 4;//Jdk1.5后出现的 自动装箱
x1 = x1+2;//对象加整数 x+2:x进行了自动拆箱 变成了int类型和2进行加法
//再将和进行装箱赋给x1 拆箱原理 Integer.intValue
//需要注意 Integer x = null容易造成空指针异常
Integer m = 128;
Integer n = 128;
System.out.println(m==n);//false
Integer a = 127;
Integer b = 127;
System.out.println(a==b);//true ,因为a和b指向了同一个Integer对象
//因为当值在byte范围内时,对于新特性,如果数值已经存在则不会再开辟新的空间
}

public static void method()
{
Integer in = new Integer("123");
Integer ni = new Integer(123);
System.out.println(in==ni);//false两个对象
System.out.println(in.equals(ni));//true Integer复写了equals方法
}
}


================================================================================
connection
|
|
---------------------------
list set
| |
| |
-------------------- ------------------
| | | | |
| | | | |
ArrayList LinkedList Vector HashSet TreeSet

为什么会出现这么多的容器?
因为每个容器对数据的存储方式不同
这个存储方式称之为:数据结构
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值