1.未知输入字符的数量:
1.2 n.length 方法(未知数量变为已知数量字符)
java:
- 源代码(输入一串字符,取出其中的元音)
public static void main(String[] args) {
//写一函数,将一个字符串中的元音字母复制到另一个字符串,然后输出
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String n = sc.next();
for(int i=0;i<n.length();i++) {
char m = n.charAt(i);
if(m=='a'||m=='e'||m=='i'||m=='o'||m=='u')
System.out.print(m);
}//这种一次只能存储一个字符串
}
}
注:charAt(i)
是 String
类的一个方法,它用于返回字符串中指定索引位置的字符。这里的 i
是一个整数,代表了你想要获取的字符在字符串中的位置(索引从0开始) //和数组取其任意位置的字符效果一样。
该题中:
n.length
代表字符串n
的长度,即字符串中字符的个数。-
在 Java 中,字符串是一个对象,它有一个
length()
方法,用于返回该字符串的长度(即字符的数量)。在这个例子中,n.length()
返回了字符串n
中字符的总数,或者使用动态存储c -
在 C 语言中字符串通常是以字符数组的形式表示的,因此没有直接的
length
属性来获取字符串的长度。相反,C 语言提供了一些函数来操作字符串,包括一个函数来计算字符串的长度。你可以使用strlen
函数来计算一个字符串的长度。strlen
函数定义在<string.h>
头文件中,它接受一个字符指针(通常是一个字符串)作为参数,并返回字符串中字符的数量(不包括末尾的空字符 '\0'), -
char str[] = "Hello, World!";//输入一串字符
-
int length=strlen(str);//计算该字串长度
strlen(str)
返回字符串str
的长度(不包括末尾的空字符),然后将这个长度存储在length
变量中。然后,程序打印出这个长度。 -
String.valueOf(char)
时,您正在执行一个从char
类型到String
类型的显式转换 -
1.3动态存储(按未知量解决)
-
在Java中,存储未知数量的字符串到
List<String>
时,通常的做法是使用ArrayList
或者其他的List
实现类,因为它允许动态地添加元素。你已经提到了使用while
循环或for
循环来读取输入并添加到列表中的方法。这里再详细讨论一下这两种方法,并补充一些其他可能的方案。1. 使用
while
循环和标识符这种方法通常用于从输入流(例如用户输入、文件等)中读取字符串,直到遇到特定的标识符为止。
java复制代码
import java.util.List;
import java.util.ArrayList;//必要的俩个类
List<String> stringList = new ArrayList<>();
//List为接口,string为类型,stringList为变量名
String input;
System.out.println("请输入字符串,输入'END'结束:");
while (!(input = scanner.nextLine()).equals("END")) {
stringList.add(input);
}
scanner.close();
在这个例子中,用户输入字符串,每输入一个字符串就按下回车,直到输入"END"为止。程序会将每个字符串添加到
stringList
中。2. 使用
for
循环和最大初值如果你有一个大致的最大值预期,可以使用
for
循环来读取固定次数的输入。但这种方法不是真正的动态存储,因为它依赖于一个预设的最大值。java复制代码
Scanner scanner = new Scanner(System.in);
List<String> stringList = new ArrayList<>();
int maxInputs = 10; // 假设最多输入10个字符串
for (int i = 0; i < maxInputs; i++) {
System.out.println("请输入字符串:" + (i + 1));
stringList.add(scanner.nextLine());
}//这个可以存取多个字符串
scanner.close();
3. 使用迭代器(Iterator)或流(Stream)
如果你的输入来自一个实现了
Iterable
接口的对象(如集合、数组等),你可以使用迭代器或Java 8引入的流来动态地处理输入。这种方法不是直接用于从用户或文件读取,而是用于处理已经存在于内存中的数据集合。例如,使用流处理一个字符串数组:
java复制代码
String[] inputArray = {"string1", "string2", "string3"}; // 假设这是你的输入源
List<String> stringList = Arrays.stream(inputArray)
.collect(Collectors.toList());
4. 动态存储的专有方法
Java的
List
接口和它的实现类(如ArrayList
)本身就是为动态存储设计的。它们允许你在运行时根据需要添加或删除元素。因此,当你提到“动态存储专有的方法”时,实际上你已经在使用它们了。ArrayList
会根据需要自动调整其内部数组的大小。没有专门的“动态存储方法”独立于
List
接口和其实现类之外。你通常是根据具体的应用场景选择最适合的集合类(如ArrayList
,LinkedList
等)和读取输入的方式(如使用循环、流等)。总之,对于未知数量的字符串,使用
List
接口的实现类(如ArrayList
)是最常见且灵活的方式。具体如何读取和存储这些字符串则取决于你的输入源和需求。 -
(2)字符串类库方法
java复制代码
System.out.println(concatenated); // 输出连接后的字符串 | |
// 或写入文件、发送到网络等 |
这些只是字符串操作的一部分。Java的String
类提供了很多其他有用的方法,你可以根据具体需求查阅Java文档以获取更多信息。同时,记住字符串在Java中是不可变的,这意味着对字符串的任何操作实际上都会返回一个新的字符串对象,而不是修改原始对象。
-
字符串的各种类库
-
在Java中,对字符串进行操作通常涉及一系列步骤,这些步骤可以根据你的具体需求而变化。假设你已知字符串的数量,并且想要对这些字符串执行一些常见的操作,以下是一些可能的步骤和例子:
- 初始化字符串数组或列表
首先,你需要创建一个能够存储这些字符串的数据结构。这可以是一个字符串数组或一个ArrayList<String>
。 -
java复制代码
int numberOfStrings = 10; // 假设有10个字符串
String[] strings = new String[numberOfStrings];
// 或者使用ArrayList
List<String> stringList = new ArrayList<>(numberOfStrings);
- 填充字符串
接着,你需要为这些字符串赋值。这可以通过直接赋值、循环、用户输入或文件读取等方式完成。 -
java复制代码
for (int i = 0; i < numberOfStrings; i++) {
strings[i] = "字符串" + i; // 示例:创建包含索引的字符串
// 或者从用户输入、文件等获取字符串
}
// 如果使用ArrayList
for (int i = 0; i < numberOfStrings; i++) {
stringList.add("字符串" + i);
}
-
字符串操作
现在你可以对字符串执行各种操作了。以下是一些常见的操作:连接(Concatenation) 将两个或多个字符串合并成一个。
java复制代码
String concatenated = strings[0] + strings[1];
比较(Comparison) 比较两个字符串是否相等,或者比较它们在字典序中的位置。
java复制代码
if (strings[0].equals(strings[1])) {
// 字符串相等
}
int comparison = strings[0].compareTo(strings[1]);
子字符串操作 提取字符串的一部分,或者查找子字符串的位置
java复制代码
String substring = strings[0].substring(1, 3); // 获取索引1到2(不包括3)的子字符串
int index = strings[0].indexOf("子字符串"); // 查找子字符串的位置
替换和删除 替换字符串中的某些字符或子字符串,或者删除特定的字符。
java复制代码
String replaced = strings[0].replace("旧", "新");
String trimmed = strings[0].trim(); // 去除首尾的空格
大小写转换 将字符串转换为全大写或全小写
java复制代码
String upperCase = strings[0].toUpperCase();
String lowerCase = strings[0].toLowerCase();
分割 根据指定的分隔符将字符串分割为多个子字符串
java复制代码
String[] splitStrings = strings[0].split(","); // 根据逗号分割字符串
检查 检查字符串是否包含特定的字符或子字符串,或者检查字符串是否为空。
java复制代码
boolean contains = strings[0].contains("特定字符");
boolean isEmpty = strings[0].isEmpty();
- 连接(Concatenation)
将两个或多个字符串合并成一个。 - 比较(Comparison)
比较两个字符串是否相等,或者比较它们在字典序中的位置。 - 子字符串操作
提取字符串的一部分,或者查找子字符串的位置。 - 替换和删除
替换字符串中的某些字符或子字符串,或者删除特定的字符。 - 大小写转换
将字符串转换为全大写或全小写。 - 分割
根据指定的分隔符将字符串分割为多个子字符串。 - 检查
检查字符串是否包含特定的字符或子字符串,或者检查字符串是否为空。
- 连接(Concatenation)
-
处理结果
根据你的需求,你可能需要将操作结果输出到控制台、保存到文件、通过网络发送,或者在程序的其他部分使用。
将输入的字符串直接存到数组中:
(1)未知长度
// 创建一个字符数组,用于存储字符串的字符
char[] charArray = str.toCharArray();
(2)已知长度
for (int i = 0; i < inputString.length(); i++)
{ charArray[i] = inputString.charAt(i); }
将一个字符数组转换为字符串的形式,进行输出
char[] charArray = {'H', 'e', 'l', 'l', 'o'}; // 将字符数组转换为字符串
String str = new String(charArray);
将一个字符串转换为数组的形式,进行输出
-
char x[]=str.toCharArray()
str
是一个String
类型的对象。toCharArray()
是String
类的一个方法,用于将该字符串转换为一个字符数组。这意味着字符串中的每一个字符都会成为数组中的一个元素。
对二维数组进行赋值:
public static void inputData(int[][] arr){
for(int i =0;i<arr.length;i++)
for(int j=0;j<arr[i].length;j++)
arr[i][j] =scan.nextInt();
}
俩二维数组进行合并,以数组c输出
public static int[][] addMatrix(int[][]arr1,int[][]arr2){
int [][] c = new int[arr1.length][arr1[0].length];
for(int i =0;i<arr1.length;i++)
for(int j =0;j<arr1[i].length;j++)
c[i][j] = arr1[i][j] + arr2[i][j];
return c;
}
d=addMatrix(a,b);//切记不是d[m][n],因为上面返回的是c