Marcel
Marcel

Reputation: 81

Converting Letters from String to Numbers

Hello I am new to java and I am having a hard time on converting the letters from strings to numbers for example, the user will input "I am Okay" and the output will become 901-13015-11-1-25 since, I = 9 space = 0 A = 1 M = 13 space = 0 O = 15 K = 11 A = 1 Y = 25. I tried using switch, but I am having a hard time, because the program will print what I input in the string, well here is the test code I created, I hope someone can help me or give me tips and advices.

import java.util.*;
public class New2
{
public static void main(String[] args) {

    Scanner input = new Scanner(System.in);
    System.out.print("Input the First string: ");
    String fs = input.nextLine();
    
    fstoInt(fs);
    System.out.println(fs);

}

public static int fstoInt(String fs) {
    int num = 0;
    switch (fs) {
    case "A":
        num = 1;
        break;
    case "B":
        num = 2;
        break;
    case "C":
        num = 3;
        break;
    case "D":
        num = 4;
        break;
    case "E":
        num = 5;
        break;
    case "F":
        num = 6;
        break;
    case "G":
        num = 7;
        break;
    }
    return num;
}
}

Upvotes: 0

Views: 241

Answers (1)

rzwitserloot
rzwitserloot

Reputation: 102820

output will become 901-13015-11-1-25 since, I = 9 space = 0 A = 1 M = 13 space = 0 O = 15 K = 11 A = 1 Y = 25

I don't think you read the assignment properly.

That would mean that: AA becomes 11. And K... also becomes 11. Not sure this is what you wanted.

switch (fs) {
    case "A":

assuming it's all consecutive, with "A" becoming 1, and "Z" becoming 26: characters are just numbers (their unicode value), and those letters are in sequence. So, instead of a gigantic switch block, all you need is:

int num = fs.charAt(0) - 'A' + 1;

this will turn "A" into 1, and "Z" into 26.

As the comments already said, your problem is that fs isn't just "A". It's "Hello". You need to loop through the characters. As space gets special treatment (turning into 0), and presumably anything that isn't "A" - "Z" should crash:

for (char c : fs.toCharArray()) {
    int num = charToCode(c);
}

and then write charToCode:

public int charToCode(char c) throws IllegalArgumentException {
    if (c == ' ') return 0;
    if (c >= 'A' && c <= 'Z') return c - 'A' + 1;
    throw new IllegalArgumentException(
      "Only spaces and capital letters allowed");
}

Upvotes: 1

Related Questions