Java中如何定义无长度字符串数组?报错原因及作业需求咨询
嗨,我来帮你把这两个问题理清楚~
一、Java里到底能不能定义"无长度"的字符串数组?
首先得明确:Java中的数组本质都是固定长度的,不存在真正意义上“没有长度”的数组。你尝试的两种写法报错原因各有不同:
String[] str=new String[];:这种写法属于语法错误,因为new String[]后面必须明确告诉编译器要分配多大的内存空间——要么指定长度(比如new String[5]),要么用大括号初始化元素(比如new String[]{"a","b"}),不然编译器不知道该给这个数组分配多少内存,自然会报错。String[] str=new String[]{};:其实这个写法是合法的,它定义了一个长度为0的空数组。如果你的代码里报了错,大概率是后续对这个空数组做了越界操作(比如尝试访问str[0]),毕竟空数组里没有任何元素可访问。
如果你想要的是那种可以随时添加元素、不用操心长度的“可变容器”,那别用数组了,直接用ArrayList<String>就行,它会自动帮你扩容,比数组灵活太多:
import java.util.ArrayList; public class Demo { public static void main(String[] args) { ArrayList<String> strList = new ArrayList<>(); strList.add("你好"); strList.add("Java"); // 想加多少加多少,完全不用管长度 } }
二、如何实现命令行参数找指定单词的首次索引?
你的作业需求很清晰:从命令行参数里读一系列单词,找到目标单词第一次出现的索引。先给你理清楚命令行参数的逻辑:
当你执行java FirstMatch lady That young lady looks after the old lady.时,main方法的args数组里的内容是这样的:args[0] = "lady"(要找的目标单词),args[1] = "That",args[2] = "young",args[3] = "lady",以此类推。
那实现思路就很明确了:
- 先检查参数够不够,至少得有“目标单词+至少一个待查找单词”才行;
- 从
args[1]开始遍历后面的所有单词,和目标单词对比; - 找到第一个匹配的就记录索引(示例里我按待查找序列从0开始算,你可以根据作业要求调整)。
给你写个完整的示例代码,直接用就行:
public class FirstMatch { public static void main(String[] args) { // 先判断参数是否合法 if (args.length < 2) { System.out.println("参数格式不对哦!应该这样用:java FirstMatch 要找的单词 单词1 单词2 ..."); return; } String targetWord = args[0]; int firstMatchIndex = -1; // 默认-1表示没找到 // 从第2个参数开始遍历(对应待查找的单词序列) for (int i = 1; i < args.length; i++) { // 如果需要忽略大小写匹配,把equals换成equalsIgnoreCase就行 if (args[i].equals(targetWord)) { firstMatchIndex = i - 1; // 转换成待查找序列的索引(从0开始) break; // 找到第一个就立刻退出循环 } } // 输出结果 if (firstMatchIndex != -1) { System.out.println("指定单词首次出现的索引是:" + firstMatchIndex); } else { System.out.println("没找到你要的单词哦"); } } }
测试一下:执行你给的命令,代码会找到args[3]的lady,对应待查找序列的索引是2,输出结果就是指定单词首次出现的索引是:2,完全符合你的需求。
内容的提问来源于stack exchange,提问作者ziyu zhang
相关产品推荐
相关产品推荐

