优化:02-编写一个程序,这个程序把一个整数数组中的每个元素用逗号连接成一个字符串。

zzzzzzzzzzzw___ 2020-01-10 03:51:28
需求:
1.代码运行无问题,现在就是想优化。
2.处女座,追求完美,如果瑕疵的地方一律指出。
3.2020年先定一个小目标,先来100道。
题目:
1.编写一个程序,这个程序把一个整数数组中的每个元素用逗号连接成一个字符串。
2.例如,根据内容为[1][2][3]的数组形成内容为"1,2,3"的字符串。
代码:
public class TwoDemo {
public static void main(String[] args) {
// 创建一个整数数组
int[] array = new int[] { 1, 2, 3, 4 };
// 构建一个StringBuilder(可变的字符串序列)
StringBuilder sb = new StringBuilder();

// array.length的长度为4
for (int i = 0; i < array.length - 1; i++) {
sb.append(array[i] + ","); // 程序最后结果为1,2,3,
}
sb.append(array[array.length - 1]); // 将最后一个元素单独加上,解决末尾有","问题
System.out.println(sb); // 结果为:1,2,3,4
}
}
...全文
642 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzzzzzzzzzzw___ 2020-01-13
  • 打赏
  • 举报
回复
引用 6 楼 情谊梦幻 的回复:
[quote=引用 3 楼 伊莱文要变强啊 的回复:] [quote=引用 2 楼 亦夜 的回复:] 这是多线程下的拼接结果
因为我了解到的是StringBuffer比StringBuilder快,但是没有StringBuilder安全。如果只是考虑速度的话,当然是用StringBuffer,只考虑安全的,就是StringBuilder用的多了,我是这样理解的。[/quote] 你说反了吧,StringBuffer是线程安全的,单线程中还是StringBuilder更好点[/quote]刚才查了一下,确实是StringBuffer是线程安全的,StringBuilder是线程不安全的
plutoppppp 2020-01-13
  • 打赏
  • 举报
回复
以前写的和你的相同,因为强迫症的关系改成了下面这样,你看看会不会舒服点。

    public static String listToIds(List<?> list) {
        StringBuilder stringBuilder = new StringBuilder();
        for (Object object : list) {
            stringBuilder.append(object.toString()).append(",");
        }
        if (stringBuilder.length() > 0) {
            stringBuilder.deleteCharAt(stringBuilder.length() - 1);
        }
        return stringBuilder.toString();
    }
zzzzzzzzzzzw___ 2020-01-13
  • 打赏
  • 举报
回复
引用 11 楼 一个帅逼 的回复:
[quote=引用 5 楼 伊莱文要变强啊 的回复:] [quote=引用 1 楼 一个帅逼 的回复:] 1.StringBuilder也是需要扩容的,既然是传入的一个数组,所以字符串长度是确定的,可以改为StringBuilder sb = new StringBuilder((array.length<<1)-1),避免数组长度过大时StringBuilder需要多次扩容 2.sb.append(array[i] + ","),你既然用到了StringBuilder,就是不想用字符串拼接,建议改成sb.append(array[i]).append(",")
感谢您的回答 01我温习了二进制,了解了"<<:是逻辑左移,右边补0",array.length的长度是4,二进制码是0100,array.length<<1的长度是8,<<表示将1左移一位,二进制码是1000。 02为什么用append而不用+?在循环中使用+=会创建多个StringBuilder对象,效率低,而使用append(),只会创建一个。[/quote]我的意思是你不要使用array[i] + "," ,你这里时还是字符串拼接,都改成append方式[/quote]您说的意思是这个吧:
sb.append(array[i]).append(",");
一个帅逼 2020-01-13
  • 打赏
  • 举报
回复
引用 5 楼 伊莱文要变强啊 的回复:
[quote=引用 1 楼 一个帅逼 的回复:] 1.StringBuilder也是需要扩容的,既然是传入的一个数组,所以字符串长度是确定的,可以改为StringBuilder sb = new StringBuilder((array.length<<1)-1),避免数组长度过大时StringBuilder需要多次扩容 2.sb.append(array[i] + ","),你既然用到了StringBuilder,就是不想用字符串拼接,建议改成sb.append(array[i]).append(",")
感谢您的回答 01我温习了二进制,了解了"<<:是逻辑左移,右边补0",array.length的长度是4,二进制码是0100,array.length<<1的长度是8,<<表示将1左移一位,二进制码是1000。 02为什么用append而不用+?在循环中使用+=会创建多个StringBuilder对象,效率低,而使用append(),只会创建一个。[/quote]我的意思是你不要使用array[i] + "," ,你这里时还是字符串拼接,都改成append方式
zzzzzzzzzzzw___ 2020-01-13
  • 打赏
  • 举报
回复
引用 13 楼 plutoppppp 的回复:
以前写的和你的相同,因为强迫症的关系改成了下面这样,你看看会不会舒服点。

    public static String listToIds(List<?> list) {
        StringBuilder stringBuilder = new StringBuilder();
        for (Object object : list) {
            stringBuilder.append(object.toString()).append(",");
        }
        if (stringBuilder.length() > 0) {
            stringBuilder.deleteCharAt(stringBuilder.length() - 1);
        }
        return stringBuilder.toString();
    }
试了一下还不错
死牛胖子 2020-01-12
  • 打赏
  • 举报
回复
直接使用String.join方法即可
zzzzzzzzzzzw___ 2020-01-10
  • 打赏
  • 举报
回复
02-编写程序_把一个整数数组中的每个元素用逗号连接成一个字符串 https://blog.csdn.net/qq_41293896/article/details/103928926 明天同一时间结贴,写的不对的地方,后来的同学还可以继续帮忙批评指正哈。
zzzzzzzzzzzw___ 2020-01-10
  • 打赏
  • 举报
回复
引用 4 楼 亦夜 的回复:
[quote=引用 3 楼 伊莱文要变强啊 的回复:] [quote=引用 2 楼 亦夜 的回复:] 这是多线程下的拼接结果
因为我了解到的是StringBuffer比StringBuilder快,但是没有StringBuilder安全。如果只是考虑速度的话,当然是用StringBuffer,只考虑安全的,就是StringBuilder用的多了,我是这样理解的。[/quote] 嗯,你的理解没错,所以我更注重安全一点,虽然StringBuilder比StringBuffer快,但这并不代表StringBuffer很慢,单线程,数据量大用StringBuilder,多线程,数据量不算太大用StringBuffer[/quote]感谢感谢,又学习啦
情谊梦幻 2020-01-10
  • 打赏
  • 举报
回复
引用 3 楼 伊莱文要变强啊 的回复:
[quote=引用 2 楼 亦夜 的回复:] 这是多线程下的拼接结果
因为我了解到的是StringBuffer比StringBuilder快,但是没有StringBuilder安全。如果只是考虑速度的话,当然是用StringBuffer,只考虑安全的,就是StringBuilder用的多了,我是这样理解的。[/quote] 你说反了吧,StringBuffer是线程安全的,单线程中还是StringBuilder更好点
zzzzzzzzzzzw___ 2020-01-10
  • 打赏
  • 举报
回复
引用 1 楼 一个帅逼 的回复:
1.StringBuilder也是需要扩容的,既然是传入的一个数组,所以字符串长度是确定的,可以改为StringBuilder sb = new StringBuilder((array.length<<1)-1),避免数组长度过大时StringBuilder需要多次扩容 2.sb.append(array[i] + ","),你既然用到了StringBuilder,就是不想用字符串拼接,建议改成sb.append(array[i]).append(",")
感谢您的回答 01我温习了二进制,了解了"<<:是逻辑左移,右边补0",array.length的长度是4,二进制码是0100,array.length<<1的长度是8,<<表示将1左移一位,二进制码是1000。 02为什么用append而不用+?在循环中使用+=会创建多个StringBuilder对象,效率低,而使用append(),只会创建一个。
亦夜 2020-01-10
  • 打赏
  • 举报
回复
引用 3 楼 伊莱文要变强啊 的回复:
[quote=引用 2 楼 亦夜 的回复:] 这是多线程下的拼接结果
因为我了解到的是StringBuffer比StringBuilder快,但是没有StringBuilder安全。如果只是考虑速度的话,当然是用StringBuffer,只考虑安全的,就是StringBuilder用的多了,我是这样理解的。[/quote] 嗯,你的理解没错,所以我更注重安全一点,虽然StringBuilder比StringBuffer快,但这并不代表StringBuffer很慢,单线程,数据量大用StringBuilder,多线程,数据量不算太大用StringBuffer
zzzzzzzzzzzw___ 2020-01-10
  • 打赏
  • 举报
回复
引用 2 楼 亦夜 的回复:
这是多线程下的拼接结果
因为我了解到的是StringBuffer比StringBuilder快,但是没有StringBuilder安全。如果只是考虑速度的话,当然是用StringBuffer,只考虑安全的,就是StringBuilder用的多了,我是这样理解的。
亦夜 2020-01-10
  • 打赏
  • 举报
回复
这是多线程下的拼接结果
一个帅逼 2020-01-10
  • 打赏
  • 举报
回复
1.StringBuilder也是需要扩容的,既然是传入的一个数组,所以字符串长度是确定的,可以改为StringBuilder sb = new StringBuilder((array.length<<1)-1),避免数组长度过大时StringBuilder需要多次扩容 2.sb.append(array[i] + ","),你既然用到了StringBuilder,就是不想用字符串拼接,建议改成sb.append(array[i]).append(",")

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧