字符串 day-11.4-2

字符串是Java程序中经常处理的对象,如果字符串运用的不好,将影响到程序运行的效果。在Java中国字符串作为String类的实例来处理。以对象的方式处理字符串,将使字符串更加灵活、方便。了解字符串上可用的操作,可以节省程序编写与维护的时间。

一:String类

char类型只能表示单个字符,不能表示由多个字符连接而成的字符串。在Java语言中将字符串作为对象来处理,可以通过Java.lang包中的String类来创建字符串对象。

1、声明字符串

在Java语言中字符串必须包含一对双引号("  ")之内。

例如:" 23.56","aincidnfn","好的"

这些都是字符串常量,字符串常量是系统能够显示的任何文字信息,甚至是单个字符。

注意:在Java中有双引号("  ")号包围的都是字符串,不能作为其他数据类型类来使用,如" 1+2 "的输出结果不是3;

可以通过以下语法格式来声明字符串变量:String str=[null];

String str = "5";
     /**
      * String:指定该类变量为字符串类型。
      * str:任意有效的标识符,表示字符串变量的名称。
      * 如果不赋值,表示str变量是未初始化的状态
      */
  String str1;

2、创建字符串

在Java中将字符串作为对象来管理,因此可以向创建其他类对象一样来创建字符串对象。创建对象要使用类的构造方法。String类的常用构造方法如下:

*String(char[])方法:

例如:用一个字符数组a创建String对象,实例代码如下:

char [] a={'g','o','o','d'};

String s=new String(a);    等价于  String s=new String("good");

 

*String(char a[],int offset,int length)方法:

char [] a={'g','o','o','d'};

String s=new(a,1,3);          等价于  String s=new String("ood");

提取字符数组a中的一部分创建一个字符串对象。参数offset表示开始截取的位置,length表示截取字符串的长度。

 

*String(char [] value)方法:

构造方法可分配一个新的String对象,使其表示字符数组参数中所有元素连接的结果。

char [] a={'s','t','u','d','e','n','t'};

String s=new String(a);      等价于 String s=new String("student");

 

除通过以上几种使用String类的构造方法来创造字符串变量外,还可通过字符串常量的引用赋值给一个字符串变量。

例:引用字符串常量来创建字符串变量,代码如下:

String str1,str2;

str1="We are student ";

str2="We ate student ";

此时str1和str2引用相同的字符串常量,内存都指向:We are student 。

 

二:连接字符串

对于已声明的字符串,可以对其进行相应的操作。连接字符串就是字符操作中较简单的一种。可以对多个字符串进行连接,也可以使字符串与其他数据类型进行连接。

1、连接多个字符串

使用“+”运算符可实现连接多个字符串的功能。“+”运算符可以连接多个运算符并产生一个String 对象。

      String str2=new String("Hello");
      String str3=new String("student");

      String s6=str2+"  "+str3;
      System.out.println(s6);

注意:Java中一句相连的字符串不能分开在两行中写。例如

System.out.println("I like

Java  ");

这种写法是错误的,如果一个字符串太长,为了便于阅读,可以将这个字符串分在两行上书写。

此时就可以使用“+”将两个字符串连起来,之后在加号处换行。因此,上面的语句可以修改为:

System.out .println("I like "+

"Java");

2、连接其他数据类型

字符串也可同其他基本数据类型进行连接,如果将字符串同这些数据类型进行连接,会将这些数据直接转换成字符串。

例:

    int booktime=4;
    float practice=2.5f;


    System.out.println("我每天花费"+booktime+"小时看书;"
    +practice+"小时上机练习");

效果是:我每天花费4小时看书;2.5小时上机练习

 

本案列实现的是将字符串常量与整列变量booktime 和浮点型变量practice相连后的结果输出。在这里booktime 和practice都不是字符串,当他们与字符串相连时会自动调用toString()方法,将其转换长字符串形式,然后参与连接。

注意:只要“+”运算符的一个操作数是字符串,编译器就会将另一个操作数转换成字符串形式,所以应该谨慎的将其他数据类型与字符串相连,以免出现意想不到的结果。

 

如果将上例中的输出语句修改为:

    System.out.println("我每天花费"+booktime+"小时看书;"
    +(practice+booktime)+"小时上机练习");

效果是:我每天花费4小时看书;6.5小时上机练习

 

为什么会这样?这是由于运算符是有优先级的,圆括号的优先级较高,所以先被执行,然后在将结果与字符串相连。

 

三:获得字符串信息

字符串作为对象,可通过相应的方法获取字符串的有效信息,如获得某字符串的长度,某个索引位置的字符等。

1、获取字符串长度

使用String 类的length()方法可获得声明的字符串对象的长度。

语法如下:

str.length();

其中,str为字符串对象。

 

例:获得字符串长度,实例代码如下:

String str="We are student   ";

int size=str.length();

上段代码是将字符串str的长度赋值给int型变量size ,此时变量size的值为16,这表示length()方法返回的字符串的长度包括字符串中的空格。

2、字符串查找

String类提供了两种查找字符串的方法,即indexOf()和lastIndexOf()方法。这两种方法都允许在字符串中搜索指定条件的字符或字符串。indexOf()方法返回的是搜索的字符或字符串首次出现的位置,lastIndexOf()方法返回的是搜索的字符或字符串最后一次出现的位置。

(1)indexOf(String s)

该方法用于返回参数字符串s在指定字符串中首次出现的索引位置。当调用字符串的indexOf()方法时,会从当前字符串的开始位置搜索s的位置;如果没有检索到字符串s,该方法的返回值是-1;

语法如下:

str.indexOf(substr)

*str:任意字符串对象

*substr:要搜索的字符串

例:查找字符a在字符串str中的索引位置,实例代码入下:

String str="We are student   ";

int size =str.indexOf("a");                //变量size的值是3

理解字符串的索引位置,要对字符串的下标有所了解。在计算机中String对象是用数组表示的。字符串的下标是0---(length()-1) .

(2)lastindexOf(substr)

该方法用于返回指定字符串最后一次出现的索引位置。当调用字符串的lastIndexOf()方法时,会从当前字符串的开始位置检索参数str,并将最后一次出现str的索引位置返回。如果没有检索到字符串str,该方法返回-1。

语法如下:

str.lastindexOf(substr)

*str:任意字符串对象

*substr:要搜索的字符串

String str="We are student   ";

int size =str.lastindexOf("t");                //变量size的值是13

说明:如果lastIndexOf()方法中得参数是空字符串“”(注意没有空格),则返回的结果与调用该字符串length()方法的返回结果相同。

 

3、获得指定索引位置的字符

使用charAt()方法可将指定的索引处的字符返回。

语法如下:

str.charAt(int index)

*str:任意字符串

*index:整型值,用于指定要返回字符的下标。

四:字符串操作

String类中包含了很多方法,允许程序员对字符串进行操作来满足实际编程中得需要。

1、获取子字符串

通过String类的substring()方法可对字符串进行截取。这些方法的共同点就是都利用字符标的进行截取,且应该明确字符串下标是从0开始的。

substring()方法被两种不同的方法重载,来满足不同的需要。

(1)substring(int beginIndex)

该方法返回的是从指定的索引位置开始截取直到该字符串结尾的子串

语法如下:

str.substring(int beginIndex)

其中,beginIndex指定从某一索引开始截取字符串。

注意:在字符串中空格占用一个索引位置。

(2)substring(int beginIndex,int endIndex)

该方法返回的是从字符串某一索引位置开始截取至某一索引位置结束的字串。

语法如下:

substring(int beginIndex,endIndex)

*beginIndex:开始截取子字符串的索引位置

*endIndex:子字符串在整个字符串中得结束位置

2、去除空格

trim()方法返回字符串的副本,忽略前导空格和尾部空格。(就是忽略前面空格和后面空格的意思)

例:

   String str1="   Hello    word      ";
   System.out.println(str1.length());//返回值是22
   System.out.println(str1.trim().length());//返回值是13

3、字符串替换

replace()方法可实现将指定的字符或者字符串替换成新的字符或字符串。

语法如下:

str.replace(char oldChar,char newChar)

*oldChar:要替换的字符或字符串

*newChar:用于替换原来字符串的内容

replace()方法返回的结果是一个新的字符串。如果字符串oldChar没有出现在该对象表达式中的字符串序列中,则将原字符串返回。

例如:

String str1="   Hello    word      ";

String newstr=str1.replace("w", "W");

效果如下: Hello    Word

明:如果要替换的字符oldChar在字符串中重复出现多次,replace()方法会将所有oldChar全部替换成newChar。

另外,要替换的字符oldChar的大小写要与原字符串中字符的大小写保存一致,否则不能成功的替换。

深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值