给定一个字符串/文本,如何从给定的字符串/文本中获取以下每个字母对?

问题描述

给出一个字符串,我该如何接受每对字母?

这里是一个示例,给定字符串=“ asdfg”,代码输出arr [as,df,g_]; 给定字符串=“ asdfgghk”,代码输出arr [as,df,gg,hk]。

如果字符串长度为奇数,则最后一对将为char [i] _(下划线)

这是我编写的代码的一部分:

APPT_DATE      APPT_TIME 
-------------  ------------
NOV 06,2020   10:45 AM 
NOV 06,2020   11:30 AM 

解决方法

众多解决方案之一:

public static String[] solution(String s) {
    int arrayLen = s.isEmpty() ? 1 : (int) Math.ceil(s.length() / 2.0);
    String[] arr = new String[arrayLen];

    for (int i = 0; i < arrayLen; i++) {
        arr[i] = s.substring(Math.min(s.length(),i * 2),Math.min(s.length(),i * 2 + 2));
    }
    if (arr[arrayLen - 1].length() == 1) {
        arr[arrayLen - 1] = arr[arrayLen - 1] + "_";
    } else if (arr[arrayLen - 1].isEmpty()){
        arr[arrayLen - 1] = "__";
    }

    return arr;
}
,

使用正则表达式非常容易。只需每2个字符分割一次字符串,如果数组的最后一个元素不足一个字符,则在其后附加_

演示:

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        // Test
        System.out.println(Arrays.toString(solution("asdfg")));
        System.out.println(Arrays.toString(solution("asdfgghk")));
    }

    public static String[] solution(String s) {
        // Split the string on every 2 characters
        String[] arr = s.split("(?<=\\G..)");

        // If the last element of the array is short of one character,append '_' to it
        if (arr.length > 1 && arr[arr.length - 1].length() != 2) {
            arr[arr.length - 1] += "_";
        }
        return arr;
    }
}

输出:

[as,df,g_]
[as,gg,hk]

注意:正则表达式(?<=\\G..)的说明如下:

  1. \G在上一场比赛的末尾或首场比赛的字符串开头断言位置
  2. .匹配任何字符(行终止符除外)