Java.lang.String中 API String

Java String 类详解
本文详细介绍了 Java 中 String 类的功能及使用方法,包括字符串创建、比较、检索、替换、分割等操作,以及如何利用 String 类提供的 API 实现字符串的高效处理。
Java.lang.String中JDK API 1.6.0摘要。

String 类代表字符串。示例:
String str = "abc";
字符串是常量,它们的值在创建之后不能更改。
字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享。
String 类包括的方法可用于检查序列的单个字符、比较字符串、搜索字符串、
提取子字符串、创建字符串副本并将所有字符全部转换为大写或小写。

String的构造方法:
char charAt(int index)
返回指定索引处的 char 值。
int compareTo(String anotherString)
按字典顺序比较两个字符串。
int compareToIgnoreCase(String str)
按字典顺序比较两个字符串,不考虑大小写。
boolean contains(CharSequence s)
当且仅当此字符串包含指定的 char 值序列时,返回 true。
boolean contentEquals(CharSequence cs)
将此字符串与指定的 CharSequence 比较。
static String copyValueOf(char[] data)
返回指定数组中表示该字符序列的 String。
boolean endsWith(String suffix)
测试此字符串是否以指定的后缀结束。
boolean equals(Object anObject)
将此字符串与指定的对象比较。
boolean equalsIgnoreCase(String anotherString)
将此 String 与另一个 String 比较,不考虑大小写。
static String format(Locale l, String format, Object... args)
使用指定的语言环境、格式字符串和参数返回一个格式化字符串。
byte[] getBytes()
使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
int hashCode()
返回此字符串的哈希码。
int indexOf(int ch)
返回指定字符在此字符串中第一次出现处的索引。
String intern()
返回字符串对象的规范化表示形式。
boolean isEmpty()
当且仅当 length() 为 0 时返回 true。
int lastIndexOf(int ch)
返回指定字符在此字符串中最后一次出现处的索引。
int length()
返回此字符串的长度。
boolean matches(String regex)
告知此字符串是否匹配给定的正则表达式。
int offsetByCodePoints(int index, int codePointOffset)
返回此 String 中从给定的 index 处偏移 codePointOffset 个代码点的索引。
boolean regionMatches(int toffset, String other, int ooffset, int len)
测试两个字符串区域是否相等。
String replace(char oldChar, char newChar)
返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
String replaceAll(String regex, String replacement)
使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
String replaceFirst(String regex, String replacement)
使用给定的 replacement 替换此字符串匹配给定的正则表达式的第一个子字符串。
String[] split(String regex, int limit)
根据匹配给定的正则表达式来拆分此字符串。
boolean startsWith(String prefix, int toffset)
测试此字符串从指定索引开始的子字符串是否以指定前缀开始。
CharSequence subSequence(int beginIndex, int endIndex)
返回一个新的字符序列,它是此序列的一个子序列。
String substring(int beginIndex, int endIndex)
返回一个新字符串,它是此字符串的一个子字符串。
char[] toCharArray()
将此字符串转换为一个新的字符数组。
String toLowerCase()
使用默认语言环境的规则将此 String 中的所有字符都转换为小写。
String toUpperCase()
使用默认语言环境的规则将此 String 中的所有字符都转换为大写。
String trim()
返回字符串的副本,忽略前导空白和尾部空白。
static String valueOf(数据类型)
返回 数据类型 参数的字符串表示形式。
基于数据驱动的 Koopman 算子的递归神经网络模型线性化,用于纳米定位系统的预测控制研究(Matlab代码实现)内容概要:本文围绕“基于数据驱动的Koopman算子的递归神经网络模型线性化”展开,旨在研究纳米定位系统的预测控制问题,并提供完整的Matlab代码实现。文章结合数据驱动方法与Koopman算子理论,利用递归神经网络(RNN)对非线性系统进行建模与线性化处理,从而提升纳米级定位系统的精度与动态响应性能。该方法通过提取系统隐含动态特征,构建近似线性模型,便于后续模型预测控制(MPC)的设计与优化,适用于高精度自动化控制场景。文中还展示了相关实验验证与仿真结果,证明了该方法的有效性和先进性。; 适合人群:具备一定控制理论基础和Matlab编程能力,从事精密控制、智能制造、自动化或相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于纳米级精密定位系统(如原子力显微镜、半导体制造设备)中的高性能控制设计;②为非线性系统建模与线性化提供一种结合深度学习与现代控制理论的新思路;③帮助读者掌握Koopman算子、RNN建模与模型预测控制的综合应用。; 阅读建议:建议读者结合提供的Matlab代码逐段理解算法实现流程,重点关注数据预处理、RNN结构设计、Koopman观测矩阵构建及MPC控制器集成等关键环节,并可通过更换实际系统数据进行迁移验证,深化对方法泛化能力的理解。
这个错误表明 **JUnit 5 无法解析测试方法 `test2_1` 中的参数 `endDate`**,因为没有注册对应的 `ParameterResolver` 来提供这个参数的值。 --- ## **错误原因分析** 1. **JUnit 5 参数化测试机制**: - JUnit 5 默认不支持直接传递参数给测试方法(除非使用 `@ParameterizedTest` 或自定义 `ParameterResolver`)。 - 您的测试方法 `test2_1` 接收多个 `String` 参数(如 `endDate`),但 JUnit 不知道如何提供这些参数。 2. **可能的原因**: - 您可能误用了 `@Test` 而不是 `@ParameterizedTest`。 - 您可能希望使用 `@CsvSource`、`@ValueSource` 等参数化测试扩展,但没有正确配置。 - 您可能尝试手动传递参数(如通过反射或自定义运行器),但没有注册 `ParameterResolver`。 --- ## **解决方案** ### **方案 1:改用 `@ParameterizedTest`(推荐)** 如果您的测试需要多个参数,可以使用 `@ParameterizedTest` 结合 `@CsvSource` 或 `@MethodSource`: ```java import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.CsvSource; public class Sana0817Test { @ParameterizedTest @CsvSource({ "param1, param2, param3, param4, param5, param6, param7, param8, endDateValue" }) void test2_1( String param1, String param2, String param3, String param4, String param5, String param6, String param7, String param8, String endDate ) throws Exception { // 测试逻辑 } } ``` ### **方案 2:使用 `@Test` 但移除参数** 如果您的测试不需要参数化,可以移除方法参数,改用固定值或依赖注入: ```java import org.junit.jupiter.api.Test; public class Sana0817Test { @Test void test2_1() throws Exception { String endDate = "2023-12-31"; // 固定值 // 测试逻辑 } } ``` ### **方案 3:自定义 `ParameterResolver`** 如果您确实需要动态解析参数(如从配置文件或数据库读取),可以实现 `ParameterResolver`: ```java import org.junit.jupiter.api.extension.*; public class EndDateParameterResolver implements ParameterResolver { @Override public boolean supportsParameter(ParameterContext parameterContext, ExtensionContext extensionContext) { return parameterContext.getParameter().getType() == String.class && parameterContext.getParameter().getName().equals("endDate"); } @Override public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) { return "2023-12-31"; // 返回动态值 } } ``` 然后在测试类上注册: ```java import org.junit.jupiter.api.extension.ExtendWith; @ExtendWith(EndDateParameterResolver.class) public class Sana0817Test { @Test void test2_1(String endDate) throws Exception { System.out.println("endDate = " + endDate); // 输出 "2023-12-31" } } ``` --- ## **常见问题排查** 1. **检查是否误用了 `@Test` 而不是 `@ParameterizedTest`**: - `@Test` 方法不能有参数(除非使用 `ParameterResolver`)。 - `@ParameterizedTest` 必须配合参数源(如 `@CsvSource`)使用。 2. **检查参数名称是否匹配**: - 如果使用自定义 `ParameterResolver`,确保 `supportsParameter()` 方法正确匹配参数名称或类型。 3. **检查依赖是否完整**: - 确保 `junit-jupiter-params` 在依赖中(如果使用参数化测试): ```xml <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-params</artifactId> <version>5.8.2</version> <scope>test</scope> </dependency> ``` 4. **检查 IDE 是否支持 JUnit 5**: - 某些旧版 IDE 可能需要手动启用 JUnit 5 支持。 --- ## **总结** - **根本原因**:JUnit 5 默认不支持 `@Test` 方法带参数,除非使用 `@ParameterizedTest` 或自定义 `ParameterResolver`。 - **解决方案**: 1. 改用 `@ParameterizedTest` + `@CsvSource`(推荐)。 2. 移除参数,改用固定值。 3. 自定义 `ParameterResolver`(适用于动态参数)。 - **最佳实践**: - 如果参数是固定的,使用 `@ParameterizedTest`。 - 如果参数是动态的,使用 `ParameterResolver` 或依赖注入框架(如 Spring 的 `@TestPropertySource`)。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值