字符串和字符数组

字符串和字符数组

字符串操作和字符数组操作是我们实现交互与实现功能最常用和打交道的两部分内容。但是之前总是混为一谈,为熟练区分转换运用,特有下面的区分归类。

首先,字符必须用单引号‘ ’括起来。

在Java中没有提供表示字符串的基本数据类型,而是通过String类来表示字符串,必须用双引号“ ”括起来。

首先数组可以存储基本数据类型,也可以存储引用类型。而且只能存储一种数据类型。

注意:这就是说除了基本数据类型,其余存储的只是引用。(可以是对象的引用等等,但不是对象本身)。

正是由于可以存储引用类型,所以才会出现了可以存放多种数据类型的假象(这是因为,基类引用(指针)指向派生类对象,这一个思想可谓是打通整个类的继承,也支持了简单工厂设计模式的实现)注【1】

没有多维数组。数组本身是数组,那么就是说,数组可存数组,但多维数组只是一个假象

int[] 就代表这一种引用类型。创建一个数组,就是在创建int[]

在数组中都有一个length属性,直接使用。

用foreach( : )循环来进行遍历,不需要指定长度。

String

首先。关于String的初始化,就可以用char数组创建

public class HelloWorld {
    
    
    public static void main(String[] args) {
    
    
        char[] a={
    
    'a','b','c','d'};

        String s = new String(a);

        String s1 = new String (a,1,2);//a,offset,count

        String s2 = new String("dfskj"); 
    }
}

连接字符串可以直接用+;

所有之后的操作都是调用字符串这个对象的方法

将String封装成对象,就实现了赋能,使String具有了强大的功能与使用张力。

.length(); //在数组中直接是length,那里长度相当于数组本身的一个属性,伴随着数组创建而定下来的,所以也决定了数组的长度是不可以改变的,而这里length()这是相当于调用对象的一个方法,所以长度可以改变,没有任何限制,只是调用这个方法来计算字符串的长度

  • 查找:(返回值是int).indexOf(); //首次出现的位置;lastIndexOf(); //最后出现的位置

  • 获取:(返回值char).charAt(int index)

  • **获取子子字符串:**substring(开始,结束(不写默认最后))返回值String

  • 去除空格:.trim();

  • 字符串替换:replace(char old,char new)

  • 判断开始于结束:startsWith();endsWith();

  • 字符串分隔:结果存在字符串数组中:.split(String sign,int limit(分割次数)); //分割符,也可以是正则表达式

String与char Array的转换

这一部分容易被人忽略,但是在实际中却用的很多。

char[ ]数组与String类型的互换

1.String —> char[ ]

  • 方法1:String类中的toCharArray()方法

如:

String a = "liushiwennb";
char[ ] arr = a.toCharArray();
  • 方法2:通过String类中的charAt()方法与空的char数组

这种方法借助String的length()方法,先确定的char数组的大小。然后再借助循环用charAt()返回字符并赋值。

如:

public class HelloWorld {
    
    
    public static void main(String[] args) {
    
    
        String a = "liushiwennb";
        char[ ] arr = new char[a.length()];  // 创建和a的长度一样的字符数组

        for (int b = 0; b < a.length(); b++){
    
    

            arr[b] = a.charAt(b);
        }
    }
}

2.char[ ] —> String

  • 方法1:使用String类的构造方法,如:
char[ ] arr; // 非空的字符数组

这里有点将 char数组作为一个target,来新建一个String对象。

String result = new String(arr);

 
  • 方法2:char[ ] --> StringBuffer --> String

    这是借助于StringBuffer 这个中间对象完成如:

    char[ ] arr; // 非空的字符数组

    StingBuffer sb = new StringBuffer();

    sb.append(arr);

    String result = sb.toString(); 
  • 方法3:String类中的valueOf()方法,如:
char[ ] arr; // 非空的字符数组

String result = String.valueOf(arr);
  • 方法4:使用空的字符串,如:
char[ ] arr; // 非空的字符数组

String result = "";  //创建一个空的字符串 这里是空的字符串,不是null(不存在)的字符串
for (int a = 0; a < arr.length; a++){
    
    
    result += arr[a];
}

5)方法5:使用Arrays类中的toString()方法,如:

char[ ] arr; // 非空的字符数组

String result = Arrays.toString(arr);
  • · Integer valueOf(int i):返回一个表示指定的 int 值的 Integer 实例。
  • · Integer valueOf(String s):返回保存指定的 String 的值的 Integer 对象。
  • · Integer valueOf(String s, int radix): 返回一个 Integer 对象,该对象中保存了用第二个参数提供的基数进行解析时从指定的 String 中提取的值。
  • · radix****指定进制

因为toString方法是Object里面已经有了的方法,而所有类都是继承Object,所以“所有对象都有这个方法”。

以为String是我们在交互中使用最多的,也侧面看出了它的重要性所以才会这样赋能。

它通常只是为了方便输出,比如System.out.println(xx),括号里面的“xx”如果不是String类型话,就自动调用xx的toString()方法

总而言之,它只是sun公司开发java的时候为了方便所有类的字符串操作而特意加入的一个方法

注1:与本文无关的补充思考:派生类的强制转化为基类却给人一种派生类的指针指向可以基类的对象。但这是绝对不允许的,派生类的指针不能指向基类的对象,因为派生类内存空间比基类长,访问的话会导致内存溢出,所以不允许派生类的指针指向基类,派生类的强制转化为基类只是一种假象。强制转换与是否可以指向完全是两回事。

注2:注:Java为String类型提供了缓冲池机制,当使用双引号定义对象时,Java环境首先去字符串缓冲池寻找内容相同的字符串,如果存在就拿出来使用,否则就创建一个新的字符串放在缓冲池中。

问题:

如何将char数组中的数字转变为int型

借助包装类:Integer.valueOf(String.valueOf(numberArray[i]));

猜你喜欢

转载自blog.csdn.net/qq_45175218/article/details/104290491