Java程序扩展一个字符串,如果范围是给定的?

假设我们给出了一个String, 其中指定了一些范围, 并且我们必须将示例中给出的指定范围之间的数字放置在指定位置:
例子:

Input : string x = "1-5, 8, 11-14, 18, 20, 26-29" Output : string y = "1, 2, 3, 4, 5, 8, 11, 12, 13, 14, 18, 20, 26, 27, 28, 29"

方法:要解决上述问题, 我们可以采用以下方法:
首先, 我们必须将String拆分为String []数组。我们必须在找到符号的地方拆分字符串。
Java程序扩展一个字符串,如果范围是给定的?

文章图片
现在, 我们有了带有元素的String []数组。现在我们只需要转到String []数组的第一个索引的最后一个元素(即1)和先前的索引第一个元素(即5)。
【Java程序扩展一个字符串,如果范围是给定的?】之后, 借助for循环, 我们可以添加1到5之间的数字并将其存储在String变量中。
以上过程一直持续到String []数组的长度。
注意:借助Collections和各种实用程序方法, 我们可以轻松解决问题, 但是Collections概念并不是明智的选择权。如果我们通过Collections, 会降低性能并增加时间复杂度。在下面的程序中, 我们明确定义了自己的拆分方法和逻辑。
// Java code to demonstrate expansion // of stringpublic class StringExpand {static String[] split(String st) { // Count how many words in our string // Irrespective of spaces int wc = countWords(st); String w[] = new String[wc]; char [] c = st.toCharArray(); int k = 0 ; for ( int i = 0 ; i < c.length; i++) { String s = "" ; // Whenever we found an non-space character while (i < c.length & & c[i] != ' ' ) { // Concat with the String s // Increment the value of i s = s + c[i]; i++; }// If the String is not empty if (s.length() != 0 ) {// Add the String to the String[] // array w[k] = s; k++; } }// Returning the String[] array return w; }static int countWords(String str) { int count = 0 ; for ( int i = 0 ; i < str.length(); i++) {// The below condition to check // whether the first character is // space or not if (i == 0 & & str.charAt(i) != ' ' || str.charAt(i) != ' ' & & str.charAt(i - 1 ) == ' ' ) { count++; } } return count; }public static void expand(String s) { String p = s; String[] arr = p.split( "\\-" ); String k = "" ; for ( int i = 0 ; i < arr.length; i++) { if (i != arr.length - 1 ) { String[] arr1 = arr[i].split( ", " ); String[] arr2 = arr[i + 1 ].split( ", " ); int a = Integer.parseInt(arr1[arr1.length - 1 ]); int b = Integer.parseInt(arr2[ 0 ]); for ( int j = a + 1 ; j < b; j++) { arr[i] = arr[i] + ", " + j; } } if (k != "" ) k = k + ", " + arr[i]; else k = k + arr[i]; }System.out.println(k); }// Driver code public static void main(String[] args) { String s = "1-5, 8, 11-14, 18, 20, 26-29" ; expand(s); } }

输出如下:
1, 2, 3, 4, 5, 8, 11, 12, 13, 14, 18, 20, 26, 27, 28, 29

实施更简单:
public class Solution {public static void expand(String word) {StringBuilder sb = new StringBuilder(); // Get all intervals String[] strArr = word.split( ", " ); // Traverse through every interval for ( int i = 0 ; i < strArr.length; i++) {// Get lower and upper String[] a = strArr[i].split( "-" ); if (a.length == 2 ) {int low = Integer.parseInt(a[ 0 ]); int high = Integer.parseInt(a[a.length - 1 ]); // Append all numbers while (low < = high) { sb.append(low + " " ); low++; } } else { sb.append(strArr[i] + " " ); } }System.out.println(sb.toString()); }public static void main(String args[]) { String s = "1-5, 8, 11-14, 18, 20, 26-29" ; expand(s); } }

输出如下:
1 2 3 4 5 8 11 12 13 14 18 20 26 27 28 29

    推荐阅读