题目1(练习)
定义一个方法,把 int 数组中的数据按照指定的格式拼接成一个字符串返回,调用该方法,并在控制台输出结果。
要求:
1、如果传递的参数为空,返回null
2、如果传递的数组元素个数为0,返回[]
3、如果数组为int[] arr = {1,2,3}; ,执行方法后的输出结果为:[1, 2, 3]
训练目标
字符串的拼接
训练提示
1、定义方法的返回值是什么?参数列表是什么?
2、如果不做判断就对数组进行遍历,那么如果数组对象为空,会报出异常,怎样避免空指针异常呢?
3、拼接字符串必然涉及到频繁改变,该采用可变的字符序列StringBuilder比较好
4、遍历数组,按照题目格式拼接数组中的元素。
5、将字符串返回
6、在主方法中定义数组,并调用方法,打印结果
参考方案
使用StringBuilder拼接字符串
训练步骤
1、定义方法返回值类型:String,参数:int[] arr
2、判断对象如果为null,直接返回null
3、创建StringBuilder对象
4、遍历数组,按照要求进行拼接数组元素,如果是不是最后一个元素,还要拼接逗号和空格
5、将StringBuilder转为String返回
6、在主方法中定义数组,并调用方法,打印结果
参考答案
public class Test07 { public static void main(String[] args) { // 定义一个 int 类型的数组,用静态初始化完成数组元素的初始化 int[] arr = {1, 2, 3}; // 调用方法,输出结果 System.out.println(arrayToString(arr)); } /*定义一个方法,用于把 int 数组中的数据按照指定格式拼接成一个字符串返回 返回值类型:String 参数:int[] arr */ public static String arrayToString(int[] arr) { // 健壮性判断 if (arr == null) { return null; } //在方法中用 StringBuilder 按照要求进行拼接,并把结果转成 String 返回 StringBuilder sb = new StringBuilder(); sb.append("["); for (int i = 0; i < arr.length; i++) { // 拼接元素 sb.append(arr[i]); // 如果不是最后一个元素,再拼接逗号和空格 if (i != arr.length - 1) { sb.append(", "); } } sb.append("]"); return sb.toString(); } }
题目2(扩展)
在String类的API中,有如下两个方法:
// 查找参数字符串str在调用方法的字符串中第一次出现的索引,如果不存在,返回-1 public int indexOf(String str) // 截取字符串,从索引beginIndex(包含)开始到字符串的结尾 public String substring(int beginIndex)
请仔细阅读API中这两个方法的解释,完成如下需求。
现有如下文本:"Java语言是面向对象的,Java语言是健壮的,Java语言是安全的,Java是高性能的,Java语言是跨平台的"。请编写程序,统计该文本中"Java"一词出现的次数。
训练目标
String类API的灵活使用
训练提示
1、要找的子串是否存在,如果存在获取其出现的位置。这个可以使用indexOf完成。 2、如果找到了,那么就记录出现的位置并在剩余的字符串中继续查找该子串,而剩余字符串的起始位是出现位置再加上子串的长度。
3、以此类推,通过循环完成查找,如果找不到就是-1,每次找到用计数器记录次数。
参考方案
从左至右依次查找,将已查找的部分截取掉。
训练步骤
1、定义方法,返回值int表示次数,参数列表两个字符串,第一个表示在哪个字符串中查找,第二个表示要查找的目标子串
2、定义统计变量表示次数。
3、定义索引变量,表示每次找到子串出现的索引。
4、定义循环,判断条件为在字符串中找到了目标子串,使用indexOf实现。
5、如果找到的索引不是-1,在循环中,统计变量累加。
6、把查找过的部分剪切掉,从找到的索引+子串长度的位置开始截取,使用substring实现。
7、将统计变量返回
8、在主方法中,定义字符串表示题目中的文本,定义字符串表示要查找的子串,调用方法,获取结果。
参考答案
public class Test08 { public static void main(String[] args) { String str = "Java语言是面向对象的,Java语言是健壮的,Java语言是安全的,Java是高性能的,Java语言是跨平台的"; String tar = "Java"; // 调用方法并输出 System.out.println(search(str, tar)); } // 返回值int表示次数,参数列表str表示在哪个字符串中查找,tar表示要查找的目标子串 public static int search(String str, String tar) { // 定义统计变量表示次数 int count = 0; // 定义索引变量,表示每次找到子串出现的索引 int index = -1; // 定义循环,判断条件为在字符串中找到了目标子串 while ((index = str.indexOf(tar)) != -1) { // 将找到的索引赋值给变量并判断 // 次数累加 count++; // 把查找过的部分剪切掉,从找到的索引+子串长度的位置开始截取。 str = str.substring(index + tar.length()); } return count; } }