请教:多个作者分行显示
Author - {...}
Author - {...}
Author - {...}
我想把多个作者名作为一个字符串赋给一个变量author,应该怎么处理呢?
我的方法(本人初学java,望见谅):
String[] input = readAllFile(f).split("}");
for (int i = 0; i < input.length; i++) {
String re = input[i].replace(",", " ").trim();
if (re.startsWith("Author")) {
// 需要修改
// 把多个author放在??中?怎样计算“Author”出现次数?
StringBuffer au = new StringBuffer();
String author = au.append(input.substring(input.indexOf("-") + 2)).toString();
System.out.println(author); //输出:多个作者名,每个名字占一行
GlobalMode.put("author", author); //只输出最后一个作者名
}
注:之前定义的: HashMap<string, string=""> GlobalMode = new HashMap<string, string="">();
请问:author应该是字符串吧,可是为什么GlobalMode.put("author", author);时只输出最后一个作者名呢?不解..请各位给予指点,不胜感激!
问题补充:
我想把多个作者名当成一个字符串,然后赋给“author”,应该怎么修改GlobalMode.put("author", author)才不会只输出最后一个作者名呢?
上面回答中
[code="java"]GlobalMode.put( "author", (GlobalMode.get("author") + "," + author) );[/code]
改成
[code="java"]
String authorNames = GlobalMode.get("author");
authorNames = (authorNames == null) ? author : (authorNames + "," + author);
GlobalMode.put("author", authorNames);
[/code]
[code="java"]
String[] input = readAllFile(f).split("}");
[/code]
这个地方最好使用换行符来分割,具体是“\n”还是“\r\n”,查一下文件格式。
还有,建议使用BufferedReader的readline来逐行读取文件,不要一下全读进来。
怎样计算“Author”出现次数?
不太清楚楼主的意思,按照楼主的代码,for循环结束之后,HashMap.size()不就有了?
HashMap是键值对的映射,对于put方法,如果以前包含了一个该键的映射关系,则旧值被替换。字符串的equals方法被重写了,比较内容,所以你那里只输出最后一个作者名。
[code="java"]GlobalMode.put("author", author); //只输出最后一个作者名[/code]
Map的Key值都被写死了 都是"author" 那么每次都是对这个key设值 后设置的覆盖之前的设置 所以只可能输出最后一个
不太明白你的意图 如果用map 那么你是不是想这么用
[code="java"]GlobalMode.put(author, author);[/code]
用author名做key 值也是author
计算“Author”出现次数, 用GlobalMode.size()就可以得到了
让我来我猜猜你可能的另外一个意思:
[quote]我想把多个作者名当成一个字符串[/quote]
意思是不是 最后用 GlobalMode.get("author") 得到类似 "author1,author2,author3" 这样的结果 如果是这样的话 那么可以这样
[code="java"]
//GlobalMode.put("author", author);
GlobalMode.put( "author", (GlobalMode.get("author") + "," + author) );
[/code]
如果是这个意思的话 那么取得“Author”出现次数要在外面定义一个变量int count = 0;
然后在 if (re.startsWith("Author")) 的括号里面做 ++count;
最后count的值就是次数了。
ps: 这个 GlobalMode 变量取名有点另人费解 你究竟要用这个Map做什么用途 请说明
而且在Java中变量名应该首字母小写 类似 globalMode 这样