数组用toString()这个方法什么时候可以正常输出字符串为什么有的时候会输出hash值

oslijw 2019-03-28 02:17:35
public class StingDemo {
public static void main(String[] args) {
//从键盘读入一行英文字符串,统计并显示输出:1. 单词的个数提示:字符串对象有一个split()函数,可将指定一个分隔符,将主串拆分为子串的数组。
String str = "This is java";
System.out.println("-------------------------");
String str1 = str.toLowerCase();
System.out.println(str1);
String[]strArray = str1.split(" ");
for(String stri:strArray){
System.out.println(stri);
}
System.out.println("-----------------");
System.out.println(str + "中单词有" + strArray.length + "个");
StringBuffer sb = new StringBuffer();
/*字符串数组转化成字符串只能用循环数组然后拼接
String[] str = {"abc", "bcd", "def"};
StringBuffer sb = new StringBuffer();
for(int i = 0; i < str.length; i++){
sb. append(str[i]);
}
String s = sb.toString();

如果是 “字符数组” 转 “字符串” 可以通过下边的方法
char[] data={'a','b','c'};
String s=new String(data);
--------------------------------------------------------------------------------------------以下是自己的吐槽---------------------------------
String str2 = strArray.toString();???既然没用为什么要有toString()
System.out.println(str2);*/--------------------------------------------------吐槽结束---------------------------------------
for(int i=0;i<strArray.length;i++){
sb.append(strArray[i]);
}
System.out.println(sb);
System.out.println("----------------");
//以上可以
char[]charArray=new char[str.length()];
for(int j =0;j<sb.length();j++){

charArray[j]=sb.charAt(j);
}
/* System.out.println(charArray);
for(int s=0;s<charArray.length;s++){
System.out.print(charArray[s]);

}*/
for(char s:charArray){
System.out.print(s);

}
System.out.println();//以上已经成功的把字符串变成了char类型的数组
int count;//用于获取26字母出现次数
for(char i='a';i<'z';i++){//用hash值也可以用int
count = 0;
for(int j = 0;j<charArray.length;j++){
if(charArray[j] == i){
count++;
}
}
if(count != 0){
System.out.println(i + "出现的次数为" + count + "次");
}
}
System.out.println("-----------------------");
//下面是用int转换
int[]intArray=new int[charArray.length];
for(int i = 0;i<intArray.length-2;i++){
intArray[i]=(int)(charArray[i]);
System.out.println(intArray[i]);
}System.out.println("---");
for(int i = (int)('a');i<(int)('z');i++){
count=0;
for(int j = 0;j <intArray.length-2;j++){
if(intArray[j] == i){
count++;
}
}
if(count!=0){
System.out.println((char)(i) + "出现的次数为" + count + "次");


}
/*
2. a-z每个字母出现的次数,不区分大小写
提示:字符串对象的charAt(int index)函数,可返回串中每一位的字符。
a. 可以用数组分别存放26个字母的出现次数。
b. 字母可强制转换为整数形态的ascii值,而a~ z 的ascii值是按顺序来的
*/
}

}
}
...全文
405 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
oslijw 2019-03-29
  • 打赏
  • 举报
回复
引用 9 楼 pengfeizhang1994 的回复:
toString()方式是Object类中实现的一个方法,如果你调用的实际类中没有重写toString,就会输出hash值。所以要看你的数组里面具体用的是什么实体类。
所以大部分时候自己创建类都需要重构这个方法是吧
oslijw 2019-03-29
  • 打赏
  • 举报
回复
引用 10 楼 qybao 的回复:
是的,stringbuffe重写过toString方法,很多类都有重写toString方法,例如Date等等 你定义一个类,然后类里重新实现一个public String toString()方法就可以里。具体你可以参考一些子类重写父类方法的相关资料
好的今天刚刚学到重构方法
qybao 2019-03-29
  • 打赏
  • 举报
回复
是的,stringbuffe重写过toString方法,很多类都有重写toString方法,例如Date等等 你定义一个类,然后类里重新实现一个public String toString()方法就可以里。具体你可以参考一些子类重写父类方法的相关资料
  • 打赏
  • 举报
回复
toString()方式是Object类中实现的一个方法,如果你调用的实际类中没有重写toString,就会输出hash值。所以要看你的数组里面具体用的是什么实体类。
oslijw 2019-03-29
  • 打赏
  • 举报
回复
引用 4 楼 qybao 的回复:
首先数组也是个对象 在java里,任何对象(除String外),如果没有重写toString方法,就会调用父类Object的toString方法,Object的toString方法就是打印对象的hash值
我知道Object是一切类的直接父类或者间接父类但是我不明白的一点是如果是StringBuffer类用toString()方法得到的字符串就可以直接打印出来是因为在这个类中toString()这个方法重构过了吗?然后还有就是toString的重构不知道怎么进行我看了一些还是不太懂怎么重构!
oslijw 2019-03-29
  • 打赏
  • 举报
回复
引用 10 楼 qybao 的回复:
是的,stringbuffe重写过toString方法,很多类都有重写toString方法,例如Date等等 你定义一个类,然后类里重新实现一个public String toString()方法就可以里。具体你可以参考一些子类重写父类方法的相关资料
好的
oslijw 2019-03-29
  • 打赏
  • 举报
回复
引用 2 楼 new_bug1234 的回复:
你这个稍微有点乱,我觉得你得复习下java堆栈的知识。关于你吐槽的问题,你strArray是栈里面的变量名,指向堆内存,是hash类型的。你String str2=strArray就表明你要让String类型强转为hash类型,当然需要roStrong
堆栈这两个我了解不多本科生还在自己探索这个是学的第一门编程语言所以有很多地方不太懂
oslijw 2019-03-29
  • 打赏
  • 举报
回复
引用 3 楼 new_bug1234 的回复:
你那个split里面是没放东西吗,好像记得没放就没有用吧
emmmm因为分隔符是一个空格不过有效果我知道要用s或者\\s来当空格的分隔符
qybao 2019-03-28
  • 打赏
  • 举报
回复
数组是个对象,要转成String就要调用toString方法,否则类型不一致,出错
qybao 2019-03-28
  • 打赏
  • 举报
回复
首先数组也是个对象 在java里,任何对象(除String外),如果没有重写toString方法,就会调用父类Object的toString方法,Object的toString方法就是打印对象的hash值
new_bug1234 2019-03-28
  • 打赏
  • 举报
回复
你那个split里面是没放东西吗,好像记得没放就没有用吧
new_bug1234 2019-03-28
  • 打赏
  • 举报
回复
你这个稍微有点乱,我觉得你得复习下java堆栈的知识。关于你吐槽的问题,你strArray是栈里面的变量名,指向堆内存,是hash类型的。你String str2=strArray就表明你要让String类型强转为hash类型,当然需要roStrong
oslijw 2019-03-28
  • 打赏
  • 举报
回复
有人帮我回答一下吗 我刚刚开始学不久

51,412

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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