字符串初解

字符串概述和特点及使用

字符串概述

java.lang.String类代表字符串
注:lang包无需导入
程序中所有双引号的对象,都是string类的对象
字符串的特点:
1.字符串的内容不可改变
2.由于字符串不可改变,所以字符串是可以进行共享
3.字符串效果上相当于char[]字符数组,但是原理是为byte[]字节数组。

构造方法

创建字符串的常见3+1方式;
三种构造方法:
public String(),创建一个空白字符串
public String(char[] array);根据字符数组创的内容,来创建对应的字符串。
public String(byte[] array);根据字节数组创的内容,来创建对应的字符串。
一种直接创建
String str=“hello”;
注意,虽然没有new,但是它就是字符串对象

public class demo01String {
    public static void main(String[] args) {
        //使用空参
        String string=new String();
        //根据字符数组创建
        char a[]={'a','b'};
        String string1=new String(a);
        //根据字节数组创建
        byte b[]= {97, 98};
        String string2=new String(b);
        System.out.println("diyige"+string);
        System.out.println("di2ge"+string1);
        System.out.println("di3ge"+string2);
        //直接创建
        String str="hello";

    }
    }

字符串常量池

字符串常量池,程序当中直接写上的双引号字符串,就在字符串常量池中

public class demo02string {
    public static void main(String[] args) {
        String str1="abc";
        String str2="abc";

        char[] array={'a','b','c'};
        String str3=new String(array);
        System.out.println(str1==str2);
        System.out.println(str1==str3);
        System.out.println(str2==str3);
    }
}

在这里插入图片描述该图源自b站视频

字符串常用获取方法

String 当中获取相关的常用方法:

  1. pulic int length()获取字符串含有的字符数
  2. public concat (String str);将当前字符串和参数字符串拼接成为返回值的字符串
  3. public char charAt(int index),获取指定索引位置的单个字符,索引从0开始
  4. public int indexOf(String str)查找参数字符串在本字符串首次出现的位置,若没有返回-1;
    注意:字符串但凡改变必定是创建了一个新字符串
public class demoStringGet {
    public static void main(String[] args) {
        //获取字符串长度
        String s="fdhsjkfhdjksahfjh";
        int length=s.length();
        System.out.println("length="+length);

        //拼接字符串
        char[] chars={'a','b'};
        String s1=new String(chars);
        String s2=s.concat(s1);
        System.out.println(s);//不变
        System.out.println(s1);//不变
        System.out.println("拼接字符串"+s2);

        //获取单个字符
        char c=s.charAt(1);
        System.out.println(c);

        //查找参数字符串在本字符串第一次出现的位置
        int position=s.indexOf(c);
        System.out.println(position);
    }
}

字符串比较相关方法(常用)

注意:==是对对象地址进行比较,如果确实需要字符串内容比较,可以使用两个方法:

  1. public boolean equals(Object obj),参数可以是任何对象,只有参数是一个字符串并且内容相同才会返回ture,否则为false
  2. public boolean equalsIgnoreCase(Object obj)忽略大小写进行比较
    注意事项:
    1.任何对象都能用object进行接收
    2.如果比较双方为一个变量和一个常量,推荐吧常量写在前面
public class StringMethod {
    public static void main(String[] args) {
        String string="hello";
        String string1="hello";
        char[] chars={'h','e','l','l','o'};
        String string2=new String(chars);

        System.out.println(string.equals(string1));
        System.out.println(string.equals(string2));
        System.out.println(string2.equals(string1));
        System.out.println("hello".equals(string));

        String string3=null;
        System.out.println("hello".equals(string3));//推荐,返回false
       // System.out.println(string3.equals("hello"));//这样写会产生空指针错误,可以尝试一下

        String string4="java";
        String string5="Java";
        System.out.println(string4.equals(string5));//区分大小写,返回false
        System.out.println(string4.equalsIgnoreCase(string5));//忽略大小写返回ture
    }
}

分割字符串的方法

public String[] split(String regex);按照参数的规则,将字符串分割成若干部分
split函数其实是一个正则表达式,注意:如果要按照英文句点.进行分割,那么需要添加\.

public class demoStringSplit {
    public static void main(String[] args) {
        String str="aaa,bbb,ccc";
        String[] split = str.split(",");

        for (int i = 0; i <split.length ; i++) {
            System.out.println(split[i]);
        }
    }
}

字符串截取方法

  1. public String substring(int index),截取从参数开始直到末尾,返回新字符串
  2. public String substring(int begin,int end),注意,包含坐边,不包含右边
public class demoSubString {
    public static void main(String[] args) {
        String s="helloworld";
        String s1=s.substring(3);
        System.out.println(s1);
        String s2=s.substring(3,5);
        System.out.println(s2);//左闭右开

        //下面这种写法,字符串内容仍然没有改变,有两个字符串“hello”。“java”
        //s3中保存的是字符串的地址,本来是hello的地址,后来地址变为了java的地址,但内容并未改变
        String s3="hello";
        System.out.println(s3);
        s3="java";
        System.out.println(s3);
    }
}

目前就这些内容,仅作为参考,如有错误欢迎大家矫正补充。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这段代码实现了牛顿法求解二元函数的最优解,其中 `f` 是目标函数,`f1` 和 `f2` 分别是目标函数关于 $x_1$ 和 $x_2$ 的偏导数,`niudun` 函数使用牛顿法求解最优解。 具体来说,`niudun` 函数的输入参数包括初值点 `(x1, x2)` 和精度 `e`,输出结果包括运行次数和极值点。函数中定义了符号变量 `x1` 和 `x2`,计算梯度向量和 Hessian 矩阵时使用这两个符号变量,而不是具体的数值,这样可以方便地求出梯度向量和 Hessian 矩阵。函数中使用了 `sympy` 库中的 `diff` 函数和 `hessian` 函数来计算目标函数的偏导数和 Hessian 矩阵。 在函数中使用了循环来迭代求解最优解。每次迭代的步骤包括计算梯度向量和 Hessian 矩阵,求解 Hessian 矩阵的逆矩阵,计算下降方向,计算下降方向的模长,更新当点的位置。循环的终止条件是下降方向的模长小于精度 `e`。 这段代码中有一处错误,即在返回结果时,将运行次数 `k` 直接转换为字符串类型会报错,需要使用 `str(k)` 将其转换为字符串类型。同时,还需要在 `print` 函数中加上括号。另外,最后的返回结果中应该是字符串类型,因此需要将数字和字符串拼接起来。修改后的代码如下: ```python import sympy from sympy import diff, hessian import numpy as np import pandas as pd def f(x1, x2): return 2 * x1**2 + x2**2 def f1(x1, x2): x = diff(f(x1, x2), x1) return x def f2(x1, x2): y = diff(f(x1, x2), x2) return y def niudun(x1, x2, e): x3 = np.array([x1, x2]) x1, x2 = sympy.symbols('x1 x2') k = 1 grad = np.array([f1(x1, x2), f2(x1, x2)]) heisai = hessian(f(x1, x2), (x1, x2)) heisai = np.array(heisai, dtype='float') niheisai = np.linalg.inv(heisai) d = -1 * np.dot(niheisai, grad) fan = np.linalg.norm(np.array(d.astype(float)), ord=2) while abs(fan) > e: x4 = np.array(x3) + np.array(d) k += 1 x3 = x4 x1 = x3[0] x2 = x3[1] grad = np.array([f1(x1, x2), f2(x1, x2)]) heisai = hessian(f(x1, x2), (x1, x2)) heisai = np.array(heisai, dtype='float') niheisai = np.linalg.inv(heisai) d = -1 * np.dot(np.array(niheisai), grad) d = pd.DataFrame(d, dtype=np.float16) fan = np.linalg.norm(np.array(d.astype(float)), ord=2) return "运行次数为:" + str(k) + ',' + "极值点为:" + str(x4) x1, x2 = map(float, input("请输入初点:").split(' ')) e = eval(input("请输入精度:")) print(niudun(x1, x2, e)) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值