将句子转换为数组并删除字符,打印新句子。

3

免责声明:这是一项家庭作业

程序目标是:询问一个句子,然后: - 转换大写字母为小写字母(不使用 .toLowercase()) - 删除所有不是 a-z、A-Z 和 0-9 的字符 - 打印新的句子 - ... 还有更多内容,但对此不重要。

好的,我做了什么。

  • 我将我的字符串(句子)转换为字符数组。
  • 我创建了一个 for 循环来循环遍历我的数组中的所有字符。
  • 如果一个字符是大写字母,我就用 ASCII 将它转换为小写字母。

我遇到的问题是: - 看起来我改变了字符 C,但它没有以小写字母的形式存储在我的数组中? - 我如何检测非允许字符,并从我的数组中删除它们?

我的代码:

import java.util.Scanner;

public class sentence {
public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    String zin = ""; 

    System.out.print("Voer een zin in: ");
    if (scanner.hasNextLine())                        
        zin = scanner.nextLine().trim();

    if (zin.equals("")) {
        System.out.print("Geen Invoer!");
        System.exit(0);
    }

    char[] zinArray = zin.toCharArray(); 
    for (int i = 0; i < zinArray.length; i++) { 
        char c = zinArray[i]; 
        if (c >= 'A' && c <= 'Z') {
        c = (char)(c + 32);
        } else if (c >= 58 && c <= 64) {

        } else if (c >= 91 && c <= 96) {

        } else if (c  123 && c <= 126) {
      }

    }
    }
}

有人能指点我一下方向吗?

谢谢 :)

3个回答

5

考虑以下代码行:

char c = zinArray[i];

赋值会复制该值(或者在类实例的情况下是引用)。因此,你已经创建了一个 副本,存储在 zinArray[i] 中的字符。这意味着改变变量 c 的值不会改变存储在 zinArray[i] 中的值。你必须对数组项执行更改,如下所示:

zinArray[i] = (char)(c + 32);

1

这是答案代码:

问题在于你从未将值重新赋给数组,无论是当你想要转换为小写字母,还是取消符号。

import java.util.Scanner;

public class sentence {
public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    String zin = ""; 

    System.out.print("Voer een zin in: ");
    if (scanner.hasNextLine())                        
        zin = scanner.nextLine().trim();

    if (zin.equals("")) {
        System.out.print("Geen Invoer!");
        System.exit(0);
    }

    char[] zinArray = zin.toCharArray(); 

    for (int i = 0; i < zinArray.length; i++)
    { 
        char c = zinArray[i];  // ASSINGING A LOWER CASE
        if (c >= 'A' && c <= 'Z') 
        {
           zinArray[i] = (char)(c + 32);
        } 
          else if ((c >= 58 && c <= 64) ||
                   (c >= 91 && c <= 96) ||
                   (c  123 && c <= 126))
        {
            zinArray[i] = ' ';// REMOVING SIGNS
        }
      }
    }
}

1
将代码更改为以下内容:
c = (char)(c + 32);
    zinArray[i]=c;

基本上,您正在将大写字母转换为小写字母。那部分是正确的,但您没有将小写字母存回数组中,这就是为什么它不会显示在输出中。

谢谢!现在我可以解决下一个问题了 :) - swennemen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接