在一个字符串中,我该如何分开&存储字符和整数?

时间:2013-12-22 01:41:53

标签: java string char int type-conversion

我的任务是创建一个Bubble Breaker类型的游戏,我将我的任务分成几个较小的任务,然后我撞墙。

我创建了一个2D数组网格,无论何时程序启动,都会随机使用不同颜色的气泡。每行和每列都有编号,行数在数字中,列在字母中。

我的目标是让用户输入选择一个字符串(注意我只能使用字符串,因为我在预先设计的控制台中进行编程),例如B10,B9或10B。

我可以通过

检查字符是数字还是字母
command.charAt(i) >= '0' && command.charAt(i) <= '9' // i is a counter in a for

以上允许我查找它是数字还是数字,问题是选择精确网格位置,我需要,并且不能:

  • 将字符串分隔为Integrers AND字符
  • 加入两个Integrers (注意它们可以是B9,B10或10B)

This is an example of the duality B10 and 10B

4 个答案:

答案 0 :(得分:1)

您只需要两行:

int num = Integer.parseInt(str.replaceAll("\\D", ""));
String letter = str.replaceAll("\\d", "");

字符串中字母和数字的顺序无关紧要 - 这将以任何一种方式工作。

根据以下评论编辑以满足要求

要处理更大字符串中的一系列字母数字对,将字母解析为int x(其中A = 1,B = 2等)并将数字分配给{{1}你可以在空格上拆分字符串并使用类似上面的代码:

int y

使用for (String pair : command.toUpperCase().split("\\s+")) { int x = pair.replaceAll("\\d", "").charAt(0) - '@'; int y = Integer.parseInt(pair.replaceAll("\\D", "")); } 意味着不必厌恶自己使用循环变量的乏味。

减去split()的原因是'@'之前的字符,因此减去它会将'A'转换为A1转换为{{ 1}}等等。


这是一些测试代码:

B

输出:

2

答案 1 :(得分:0)

要回答这个问题,只需使用if循环。 (如果第一个char是一个数字,除了最后一个解析为整数,否则从第二个解析为整数。)(如果你想知道的话,使用String.substring(start,end)将它分开) 此外,您可以使用 Character.isDigit() 代替

command.charAt(i) >= '0' && command.charAt(i) <= '9'

(仅用于代码易读性)

答案 2 :(得分:0)

  • 循环遍历字符串
  • 检查字符是否为字母
  • 将该字母保存到变量(char letter
  • 替换原始字符串,使字母替换为空(String numString
  • 现在,您将它们分开:letternumString
  • 这适用于B1010B。并设置只有一个字母,其余数字

参见代码

String code = "10B";

char letter;

for (char c : code.toCharArray()){
    if (Character.isLetter(c)){      // if the character is a letter, save if the "letter"
        letter = c;
        break;
    }
}

String numString = code.replace(letter, "");  // replace the original string, letter for ""
// Parse if you need to 
int num = Integer.parseInt(numString);

// You have the letter by itself, and the number by itself    
System.out.println("Letter: " + letter + ", Number: " + num);

编辑:请尝试以下代码。我上面有一个错误

    String code = "10B";

    char letter = ' ';    // <-- initialize

    for (char c : code.toCharArray()) {
        if (Character.isLetter(c)) {      // if the character is a letter, save if the "letter"
            letter = c;
            break;
        }
    }

    String numString = code.replace(String.valueOf(letter), "");  <-- String valueOf
    int num = Integer.parseInt(numString);
    System.out.println("Letter: " + letter + ", Number: " + num);

结果:Letter: B, Number: 10

答案 3 :(得分:0)

public class StringSpliter {

public static void main(String[] args) {
    ArrayList<Character> chars = new ArrayList<>();
    ArrayList<Integer> ints = new ArrayList<>();
    String str = "T23his i43s a Stin4g Whi12ch C1on3431tains Ch 5ara32cter2343s and Alphabets";

    char[] mychars = str.toCharArray();

    for (int i = 0; i < mychars.length; i++) {

        if (mychars[i] >= 33 && !(mychars[i] <= '9' && mychars[i] >= '0')) {
            chars.add(mychars[i]);
        } else if (mychars[i] >= '0' && mychars[i] <= '9') {

            ints.add((Integer.parseInt(""+mychars[i])));
        }
    }
    for (int i = 0; i < chars.size() + ints.size(); i++) {
        if (i < chars.size()) {
            System.out.println(chars.get(i));
        } else {
            System.out.println(ints.get(i - chars.size()));
        }
     }
   }
 }

试试上面的代码