假设我们给出了一个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 []数组。我们必须在找到符号的地方拆分字符串。
文章图片
现在, 我们有了带有元素的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
推荐阅读
- 微处理器的发展简史详细介绍
- 持久系统面试经验分享|在校园
- jQuery如何使用fadeIn()方法(示例)
- AngularJS SQL介绍和用法示例
- AngularJS API介绍和用法示例
- 响应式设计(CSS媒体查询介绍和用法指南)
- 三星2021年暑期实习面试经历分享
- PHP如何使用dns_get_mx()函数()
- 如何将jQuery转换为JavaScript()