Sting 字符串类

一、字符串类String

  字符串(string)是由字符构成的一个序列。

1. 构建一个字符串

        //直接将字符串直接量看成String对象。
        String message = "Weclome to JAVA";

        //使用字符数组
        char[] charArray = { ‘G‘, ‘o‘, ‘o‘, ‘d‘, ‘ ‘, ‘D‘, ‘a‘, ‘y‘};
        String message = new String(charArray);        

  String变量存储的是对String对象的引用,String对象里存储的才是字符串的值。

2. 不可变字符串与限定字符串

  String对象是不可变的,它的内容是不能改变的。

String s = "Java";
s = "HTML";

//赋值以后,"Java"字符串仍然存在,并没有变成"HTML",只是已经无法访问了,因为s变量指向了新的对象。

限定(interned):对具有相同字符串序列的字符串直接量使用同一个实例。

 String s1 = new String("Weclome to Java");
 String s2 = "Weclome to Java";
 String s3 = "Weclome to Java";

 System.out.println("s1 == s2 is " + (s1 == s2));
 System.out.println("s2 == s3 is " + (s2 == s3));

结果:

s1 == s2 is false
s2 == s3 is true

==:检测两个字符串变量是否指向同一个对象。比较的是两个对象的地址

3. 字符串的比较

equals(s1:String) : boolean 如果这个字符串等于字符串s1返回true
equalsIgnoreCase(s1: String) : boolean 如果不区分大小写这个字符串等于字符串s1则返回true
compareTo(s1:String) : int  返回一个大于0、等于0或小于0的整数以表明这个字符串是大于、等于还是小于s1
compareToIgnoreCase(s1:String) : int  除了不区分大小写外,其他都和compareTo一样
regionMatched(index:int, s1:String, s1Index:int, len:int) : boolean 如果这个字符串指定的子域精确匹配字符串s1中指定的子域则返回true
regionMatches(index:int, s1:String, s1Index:int, len:int) : boolean 除了不区分大小写外,其他都和regionMatched一样
startWith( prefix:String) : boolean 如果这个字符串以指定的前缀开始则返回true
endWith(suffix:String) : boolean  如果这个字符串以指定的后缀开始则返回true

注意:== 运算符只能检测两个字符串是否指向同一个对象,不能判断两个字符串的内容是否相等。要判断两个字符串的内容是否相等应该使用equals方法。

        String s1 = new String("Weclome to Java");
        String s2 = "Weclome to Java";
        String s3 = "Weclome to Java";
        String s4 = "Weclome to C++";

        System.out.println("s1 == s2 is " + (s1 == s2));  //false
        System.out.println("s2 == s3 is " + (s2 == s3));  //true;

        System.out.println("s1 equals s2 " + s1.equals(s2));  //true
        System.out.println("s2 equals s4 " + s2.equals(s4));  //false

  compareTo方法: s1.compareTo(s2);    如果s1与s2相等,返回0,如果按字典序(即统一编码的顺序)s1小于s2,返回值小于0;如果按字典序s1大于s2,返回值大于0.

1 String s1 = new String("abc");
2 String s2 = "abg";
3
4 System.out.println( s1.compareTo(s2));  // c比g小4, 所以返回-4

4. 字符串长度、字符以及组合字符串

length():int    --返回字符串的字符个数;  massage.length()

charAt(index: int):char   --返回这个字符串中指定下标的字符  massage.charAt(0)

concat(s1:String): String   --返回连接这个字符串和字符串s1所构成的新字符串。 s3 = s1.concat(s2);等价于:s3 = s1 + s2;

  length是String类的一个方法,但它是数组对象的一个属性。获取String对象的字符个数用s.length();获取数组a的元素个数用a.length.

substring(beginIndex:int):String   --返回这个字符串中以指定的beginIndex开始并延续到字符串末尾的字串。

subString(beginIndex:int, endIndex:int):String    --返回这个字符串中以指定的beginIndex开始并延续到字符串endeIndex -1 的字串。如果beginIndex等                                                                                               于endIndex,那么返回一个长度为0的空字符串,如果beginIndex大于endIndex,运行错误。

5. 字符串的转换、替换和分隔

toLowerCase():String    --返回将所有字符转换成小写字符后的新字符串

toUpperCase():String    --返回将所有字符转换成大写字符后的新字符串

trim():String         --返回去掉两端的空白字符之后的新字符串。

replac(oldChar:char, newChar:char) : String    --返回一个新字符替换字符串中所有和它匹配的字符的新字符串

replaceFirst(oldString:String, newString):String    --返回一个新字串替换字符串中第一个和它匹配的字串之后的新字符串

replaceAll(oldString:String, newString):String     --返回一个新字串替换字符串中所有和它匹配的字串之后的新字符串

split(delimiter:String):String[]            --返回用界定符分隔的字串所构成的一个字符串数组

6. 找出字符串中的某个字符或者某个字串

indexOf(ch:char):int    --返回字符串中第一次出现ch的下标。如果不匹配则返回-1.

indexOf(ch:char, fromIndex:int):int    --返回字符串中fromIndex之后第一次出现ch的下标。如果不匹配则返回-1.

indexOf(s:String):int    --返回字符串中第一次出现字符串s的下标。如果不匹配返回-1.

indexOf(s:String, fromIndex:int):int    --返回字符串fromIndex之后第一次出现字符串s的下标。如果不匹配返回-1.

lastIndexOf(ch:char):int    --返回字符串中最后一次出现ch的下标。如果不匹配则返回-1.

lastIndexOf(ch:char, fromIndex:int):int    --返回字符串中fromIndex之前最后一次出现ch的下标。如果不匹配则返回-1.

lastIndexOf(s:String):int    --返回字符串中最后一次出现字符串s的下标。如果不匹配返回-1.

lastIndexOf(s:String, fromIndex:int):int    --返回字符串fromIndex之前最后一次出现字符串s的下标。如果不匹配返回-1.

7. 字符串与数组、数值之间的转换

tocharArray    --将字符串转换成字符数组

          char[] chars = "java".tocharArray();

将一个字符数组转成字符串需要调用构造方法String(char[])或者方法valueOf(char[]):

        String str = new String (new char[]{‘J‘, ‘a‘, ‘v‘, ‘a‘});

        String str = String.valueOf(new char[]{‘J‘, ‘a‘, ‘v‘, ‘a‘});

valueOf(c:char):String      --返回包含字符c的字符串

valueOf(data:char[]):String    --返回包含数组中字符的字符串

valueOf(d:double):String      --返回包含double值的字符串

valueOf(f:float):String        --返回包含float值的字符串

valueOf(i:int):String         --返回包含int值的字符串

valueOf(l:long):String        --返回包含long值的字符串

valueOf(b:boolean):String     --返回包含boolean值的字符串

  可以使用Double.parseDouble(str)、Integer.parseInt(str)将一个字符串转换成double型数值或者int数值。

二、StringBuilder/StringBuffer类

  可以给一个StringBuilder或者StringBuffer中添加、插入或追加新的内容,但是String对象一旦创建,它的值就确定了。

   除了StringBuffer中修改缓冲区是同步的之外,StringBuffer与StringBuilder类是很相似的。如果是多任务并发访问,就使用StringBuffer;如果是单任务访问,就使用StringBuilder会更有效。(不懂多任务并发....mark)

  java.lang.StringBuilder类的构造方法:

    StringBuilder()    --构建一个容量为16的空字符串生成器

    StringBuilder(capacity:int)  --构建一个指定容量的字符串生成器

    StringBuilder(s:String)    --构建一个带指定字符串的字符串生成器

1. 修改StringBuilder中的字符串

append(data:char[]):StringBuilder             --给这个字符串追加一个char数组

append(data:char[], offsset:int, len:int):StringBuilder    --将data中的子数组追加给这个生成器

append(v:aPerimitiveType):StringBuilder         --讲一个基本类型值作为字符串追加到这个生成器

append(s:String):StringBuilder               --将一个字符串追加到这个字符串生成器

delete(startIndex:int, endIndex:int):StringBuilder         --删除指定区间的字符:startIndex ~ endIndex - 1

deleteCharAt(Index:int):StringBuilder                --删除指定下标的字符

insert(index:int, data: cahr[], offset:int, len:int):StringBuilder  --将字符串插入到生成器的位置偏移处

insert(offset:int, s:String):StringBuilder              --将数组中数据子数组插入到生成器的指定下标处

revers():StringBuilder                       --颠倒生成器中的字符

setCharAt(index:int, ch:char):void               --在这个生成器下标处设置一个新的字符

replac(startIndex:int, endIndex:int, s:String):StringBuilder   --使用指定的字符串替换生成器中的指定区间的字符:startIndex ~ endIndex - 1 

toString():String       --从字符串生成器返回一个字符串对象

capacity():int        --返回这个字符串生成器的容量

charAt(index:int): char    --返回指定下标处的字符

length():int           --返回生成器的字符个数

setLength(newLength:int):void     --在该生成器中设置新的长度

subString(startIndex:int) :String    --返回从startIndex开始的字串

subString(startIndex:int, endIndex:int) :String    --返回从startIndex到endIndex-1之间的字串

trimTosize():void           --减少生成器所使用的存储大小。

package demo;

import java.util.Scanner;

/**
 * 编写一个小程序,输入一串包含数字、字母和特殊符号的字符串,
 * 忽略该字符串中的特殊字符,判断其是否为回文串
 * Created by luts on 2015/12/1.
 */
public class test {
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        String src = new String();
        System.out.println("输入一个任意的字符串");
        src = input.next();

        System.out.println("忽略掉输入字符串中的特殊字符,该字符串是回文串? " + isPalindrome(src));
    }

    public static boolean isPalindrome(String s){
        String tempString = filter(s);
        String tempString2 = reverse(tempString);

        return tempString.equals(tempString2);  //判断两者内容是不是相等
    }

  //过滤掉非字母、非数字的字符
    public static String filter(String src){
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0; i < src.length(); i++){
            if (Character.isLetterOrDigit(src.charAt(i)))
                stringBuilder.append(src.charAt(i));
        }
        return stringBuilder.toString();
    }

    public static String reverse(String src){
        StringBuilder stringBuilder = new StringBuilder(src);
        stringBuilder.reverse();
        return  stringBuilder.toString();
    }
}
输入一个任意的字符串
123*&%^$321
忽略掉输入字符串中的特殊字符,该字符串是回文串? true

       

时间: 2024-10-12 07:38:20

Sting 字符串类的相关文章

Python 的字符串类子串查找函数

Python 的字符串类有个很好用的函数,可很方便的用于与查找Python字符串类型对象子串相关的操作,具体的API如下: | find(...) | S.find(sub [,start [,end]]) -> int | | Return the lowest index in S where substring sub is found, | such that sub is contained within s[start:end]. Optional | arguments start

字符串类的定义和字符串类对象的创建方式

String为字符串类. 其定义如下: public final class String 可以看出,String类是final类型的,是不可继承的.从源代码还可以看出,String从本质上说就是一个char类型的数组. 字符串类对象的声明有两种方式. 第一种,使用new关键字创建. String 变量名=new String("值"); 第二种,直接声明并初始化. String 变量名="值"; 我更喜欢第一种,标准的,所有类的对象的声明都通过  new 类的构造

(十)常用类库----数值类、字符串类

类库:包含一堆类的方法和常量,便于我们直接调用 (1)数值类Numeric 基类Numeric包含两个子类Integer(整数)和Float(浮点数) 其中Integer(整数)又可以分为两个子类Fixnum(普通整数)和Bignum(大整数) 记住整数和浮点数就行,普通整数和大整数则系统会自动转换 #类型转换puts 1.2.to_iputs 1puts 1.to_fputs "3.2gg".to_iputs "4.55sss".to_f puts 1.5.rou

为什么不用C++写游戏(这些工作,QT都替开发者解决了,C++没有根类导致太多的问题,也没有字符串类)

当今世界上绝大多数游戏都是C++写的,为什么要说不呢? 要做什么?写游戏. 写游戏首先要考虑些什么?做什么样的游戏,图形.音效.游戏逻辑如何实现. 用C++要先考虑什么?定义跨平台数据类型抽象,实现常用集合类,设计宏实现RTTI,写一个支持Unicode并可以和其他多种字符串类型互相转换的字符串类,自定义内存分配器,写个shared_ptr,组织预编译头文件,设计实现Object基类以处理跨DLL内存管理等问题…… 那么这些和做游戏有什么关系?不做好这些就很难开始写游戏. 做这些要话多少时间?很

关于c++中字符串类的一些描述

1 string 类的使用,要包含头文件 #include <string> 2 两个string类可以相加,但不能相减 比如说:string s1,s2,s3; s1="asd"; s2="qw"; s3=s1+s2 则s3="asdqw" s3=s2+s1 则s3="qwasd"; 3 两个字符串还可以比较大小 可以用< > == 使用if语句对2个字符串类直接进行比较 规则是这样的,先比较第一个字

C++字符串类

好久没有写过程序,最近想学习下界面库的开发,基于directui的界面个人觉得还不错,像金山的源代码和duilib都是不错的.本人想结合二者做一个轻量级的界面库,同时又不依赖于常用的MFC.WTL等.在程序开发中字符串的使用是必须的,C++语音没有原生字符串,STL等标准库又多是模板类,如果开发DLL导出时就出现问题了.今天从WTL库里摘出来一个简单的字符串类,实现了基本功能,可在此基础上进行扩展. 头文件 1 struct CStringDataE 2 { 3 long nRefs; 4 in

JAVA字符串类

一.字符串类String1.String是一个类,位于java.lang包中2.创建一个字符串对象的2种方式: String 变量名="值"; String 对象名=new String("值");3.字符串的常用方法 3.1 字符串长度--length() 3.2 判断值是否相等 equals() 3.3 判断字符串对象地址是否相同 == 3.4 忽略 大小写 判断 equalsIgnoreCase() 3.5 大小写转换 toLowerCase()--小写 to

自己编写的Windows字符串类 封装字符串格式转换和常用操作 方便使用

最近开发的语音识别的项目经常碰到转码的问题,各种宽窄字节转换,ASNI, UTF8, 宽字节 --  代码写得冗长,繁琐,维护性太差了.决定自己写一个能直接使用各种编码的字符串类,于是实现了一个,功能不多,但是也够用.由于string 和 wstring 在多线程下共享数据会出问题,这里只用最基础的char 和 wchar_t. 基于Windows平台,代码如下 /* ************************************************** Title: 自定义字符串

第十一课、Qt中的字符串类

一.历史遗留的问题及解决方案 1.遗留的问题 (1).C语言不支持真正意义上的字符串 (2).C语言用字符数组和一组函数实现字符串操作 (3).C语言不支持自定义类型,因此无法获得字符串类型 2.解决方案 (1).从c到c++进化过程中引入了自定义类型 (2).在c++中可以通过类来完成字符串的定义 3.标准库STL (1).STL是意义上需要与c++一同发布的标准库 (2).STL是一套以模板技术完成的c++类库 (3).STL包含了常用的算法和数据结构 (4).STL包含了字符串类 4.Qt