【问题标题】:Most elegant way to turn a String into a nested Array将字符串转换为嵌套数组的最优雅方法
【发布时间】:2022-11-23 20:43:26
【问题描述】:

我得到一个格式的字符串 &lt;num-num-num&gt;&lt;num-num-num&gt;&lt;num-num-num&gt;。我想把它变成一个嵌套的整数数组,每个数组都是 <> 之间的内容。

这是我到目前为止得到的:

            String parameter = args[1];
            // split the string into an array of strings at >
            String[] splitString = parameter.split(">");
            int[][] square = new int[splitString.length][splitString.length];

            // remove <, > and - characters and push the numbers into the square
            for (int i = 0; i < splitString.length; i++) {
                splitString[i] = splitString[i].replaceAll("[<>-]", "");
                for (int j = 0; j < splitString.length; j++) {
                    square[i][j] = Integer.parseInt(splitString[i].substring(j, j + 1));
                }
            }

我觉得这不是很干净,但它确实有效。有没有人知道如何提高可读性?

【问题讨论】:

  • @AlexanderIvanchenko 阵列
  • 由于寻找“最好的”“最整洁的”方式来执行某事的问题被认为是自以为是的题外话,我恳请更改措辞。
  • 我不会关心“最优雅”,而是关心“工作”、“可维护”、“可读”、“健壮”。 “优雅”可能意味着“代码少”,而有时更多的代码会使解决方案更健壮和可读。
  • 关于主题本身:该字符串是否基本上定义了 3x3 的数字网格?
  • @Thomas 它正在定义一个 NxN 数字网格。

标签: java


【解决方案1】:

我假设 "&lt;num-num-num&gt;&lt;num-num-num&gt;&lt;num-num-num&gt;" 会定义一个 3x3 网格,所以我会使用以下方法:

  • 将字符串分成每行一个字符串,这样我们就得到了"num-num-num"。这意味着:
    • 移除前导和尾随尖括号
    • "&gt;&lt;"拆分并删除它
  • "-"拆分每一行以获得单独的数字
  • 解析数字并将它们分配给网格

一些代码示例:

String input = "<11-12-13><21-22-23><31-32-33>";
 
//remove leading < and trailing > then split at ><   
String[] inputRows = input.substring(1,input.length()-1).split("><");
    
int[][] grid = new int[inputRows.length][];
    
for( int r = 0; r < inputRows.length; r++) {
    //split the row at -
    String[] cells = inputRows[r].split("-");
        
    //convert the array of strings to an array of int by parsing each cell
    grid[r] = Arrays.stream(cells).mapToInt(Integer::parseInt).toArray();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多