【问题标题】:Java: removing quotation marks from stringJava:从字符串中删除引号
【发布时间】:2015-09-14 01:29:19
【问题描述】:

我的想法/问题:

我正在处理 Java 挑战(说明如下)。我已经完成了第 1 部分(如下代码所示)。我非常接近完成第 2/3 部分

正如您将在我的代码中看到的,我有 2 个 for 循环。第一个,遍历我的排序名称数组。第二,遍历每个名​​字中的字符。

如说明中所述,将为每个字符生成一个 int 值,然后将这些值相加。所以,A 是 1,B 是 2,C 是 3……ABC 是 6。然后将这个 int 值乘以给定字符串/名称的索引号。所以,如果 ABC(值为 6)在索引 2 处,它的分数将为 12。

以上步骤完成后,我将所有的分数(每个名字的分数)相加。

以上是我对方向的理解。

问题是我的输出如下所示:

"AARON"
0
"ABBEY"
-25
"ABBIE"
-82
"ABBY"
-90
"ABDUL"
-80
"ABE"
-260
"ABEL"
-240
"ABIGAIL"
-133
"ABRAHAM"
-128
"ABRAM"
-225
"ADA"
-540
"ADAH"
-506
"ADALBERTO"
216
"ADALINE"
-182
"ADAM"
-574
"ADAN"
-600
"ADDIE"
-592
"ADELA"
-629

我的逻辑已经运行了几次,对我来说似乎是正确的,但我不知道我是如何生成这些数字的。我唯一的想法是引号(“)正在抛弃我的计算。它们的 ASCII 值为 34。我试图在我的代码中的多个位置使用 replace() 和 replaceAll() 删除它们,但是我也没有。

我做错了什么/我该如何解决它/我需要做什么来完成这项任务/我如何改进我的代码?

挑战路线:

使用 names.txt 文件,这是一个 46K 的文本文件,包含在资源目录中找到的超过 5000 个名字。

第 1 部分: 首先将列表按字母顺序排序。将此新文件另存为答案目录中的 p4aNames.txt。

第 2 部分: 使用 p4aNames.txt,获取每个名称的字母值,并将该值乘以其在列表中的字母位置以获得名称分数。例如,当列表按字母顺序排序时,价值 3 + 15 + 12 + 9 + 14 = 53 的 COLIN 是列表中的第 938 个名称。因此,COLIN 将获得 938 × 53 = 49714 的分数。将所有名称分数的列表保存为 p4bNames.txt。

第 3 部分: 文件中所有名称分数的总和是多少?

显示输出和目录的图片链接:

http://screencast.com/t/tiiBoyOpR

我当前的代码:

package app;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;

public class AlphabetizedList {
	public static void main() throws IOException {
		new AlphabetizedList().sortingList();
	}
	public void sortingList() throws IOException {
		FileReader fb = new FileReader("resources/names.txt");
		BufferedReader bf = new BufferedReader(fb);
		String out = bf.readLine();
		out = out.substring(out.indexOf("\"")); //get rid of strange characters appearingbeforefirstname 
//		System.out.println(out); // output:
//      "MARY","PATRICIA","LINDA","BARBARA","ELIZABETH","JENNIFER","MARIA"...
		
		String[] sortedStr = out.split(",");
		Arrays.sort(sortedStr);
		
		PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter("answers/p4aNames.txt")));	
	
		for (int i = 0; i < sortedStr.length; i++) {
			
			pw.println(sortedStr[i]);
			System.out.println(sortedStr[i]);// print to console just to see output
			
			int score = 0;
//			sortedStr[i].replaceAll("\"", ""); // I used this to try to remove the "s from my Strings
			for (char ch: sortedStr[i].toUpperCase().toCharArray()) {
			     score += ((int)ch - 64);  /* A is decimal 65 */
			}
			score = score * i; /* multiply by position in the list */
			pw.println(score);
			System.out.println(score);
		}
		bf.close();		
		fb.close();		
		pw.close();
	}
} 

【问题讨论】:

    标签: java arrays string sorting replace


    【解决方案1】:

    你写的

    // sortedStr[i].replaceAll("\"", ""); // I used this to try to remove the "s from my Strings
    

    Java String 是不可变的。该函数返回一个去掉引号的新字符串。你可以使用

    sortedStr[i] = sortedStr[i].replaceAll("\"", "");
    

    它应该可以正常工作。

    【讨论】:

    • 谢谢。我不认为我会看到那个。虽然您听到了,但我可以问一下您将如何完成第 3 部分吗?第 3 部分:文件中所有名称分数的总和是多少?
    • 保留一个单独的 int 值并在获得每个单词的分数时将其汇总。
    • 我很好奇,你是从哪里找到这个挑战的?我喜欢这些东西。
    • @Daniel 我正在 Java 训练营中研究它们。给我发邮件到 reedwilliams8404@gmail.com 我会把它们发给你。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-19
    • 2021-12-12
    • 2022-01-01
    • 2011-05-12
    • 2015-04-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多