Java 逗号分隔字符串中的数字范围
我必须创建一个方法,允许用户创建如下提供id范围 3,4,5 3,,6 3,102, 3104* 在上述示例中,有三种格式,即x、x、x或x、x或x、x,其中x是asc顺序的数字 我的问题是,我必须确保用户不能创建具有重叠id范围的报价id范围。例如 如果提供id 3102,*已创建,则用户无法创建以下组合。。。3102105类似地,如果报价id范围3,*已经存在,则用户无法创建类似3,4或3,5或3,10,11的组合 我无法完成以下方法Java 逗号分隔字符串中的数字范围,java,numbers,range,Java,Numbers,Range,我必须创建一个方法,允许用户创建如下提供id范围 3,4,5 3,,6 3,102, 3104* 在上述示例中,有三种格式,即x、x、x或x、x或x、x,其中x是asc顺序的数字 我的问题是,我必须确保用户不能创建具有重叠id范围的报价id范围。例如 如果提供id 3102,*已创建,则用户无法创建以下组合。。。3102105类似地,如果报价id范围3,*已经存在,则用户无法创建类似3,4或3,5或3,10,11的组合 我无法完成以下方法 String[] digits1 = range1.sp
String[] digits1 = range1.split(",");
String[] digits2 = range2.split(",");
int digits1Len = digits1.length;
int digits2Len = digits2.length;
if (digits1[digits1Len -1].equals("*")) {
--digits1Len;
}
if (digits2[digits2Len -1].equals("*")) {
--digits2Len;
}
String[] digits1_1 = new String[digits1Len];
String[] digits2_2 = new String[digits2Len];;
System.arraycopy(digits1, 0, digits1_1, 0, digits1Len);
System.arraycopy(digits2, 0, digits2_2, 0, digits2Len);
if(!Arrays.asList(digits1_1).contains("*") || !Arrays.asList(digits2_2).contains("*")) {
if (digits1_1[digits1Len -1].equals(digits2_2[digits2Len -1])) {
if(digits1Len != digits2Len) {
result = false;
} else{
// Loop
}
} else if(false/*Lenght of the array with higher element should be more by 1 as compared to ther array*/) {
}
} else {
String [] normalPatternArr = null;
String [] oldPatternArr = null;
if(Arrays.asList(digits1_1).contains("*")) {
if (digits1_1.length < digits2_2.length) {
result = false;
} else {
normalPatternArr = digits2_2;
oldPatternArr = digits1_1;
}
} else if(Arrays.asList(digits2_2).contains("*")) {
if (digits2_2.length < digits1_1.length) {
result = false;
} else {
normalPatternArr = digits1_1;
oldPatternArr = digits2_2;
}
} else {
for (int i=0; i < normalPatternArr.length; i++) {
if (!normalPatternArr[i].equals(oldPatternArr[i])) {
if (!oldPatternArr[i].equals("*")) {
result = false;
return result;
} else {
}
}
}
}
}
我认为一个更简单的方法是把它当作一根绳子 例如 变成
String mask = "3,4,5,";
if (secondString.startsWith (mask))
// say no
但同样,可能您没有正确解释您的问题此类存储这些ID的三分之一:
public class IdRange {
private Integer[] triple = new Integer[3];
public IdRange(Integer a, Integer b, Integer c ){
this.triple[0] = a;
this.triple[1] = b;
this.triple[2] = c;
}
public Integer getTriple( int i ){ return triple[i]; }
public boolean overlap( IdRange other ){
for( int i = 0; i < 3; i++ ){
if( this.triple[i] == null ||
other.getTriple( i ) == null ) return true;
}
return false;
}
public String toString(){
StringBuilder sb = new StringBuilder();
if( triple[0] == null ) sb.append( '*' );
else sb.append( triple[0] );
sb.append( ',' );
if( triple[1] == null ) sb.append( '*' );
else sb.append( triple[1] );
sb.append( ',' );
if( triple[2] == null ) sb.append( '*' );
else sb.append( triple[2] );
return sb.toString();
}
}
此类分析一个字符串,该字符串包含一个三元组,该三元组的值缺失或带有星号,并检查重叠:
public class Ranges {
private List<IdRange> rangeList = new ArrayList<>();
public boolean parseAndCheck( String s ){
String[] abc = s.split( "," );
Integer a = null;
Integer b = null;
Integer c = null;
if( abc.length == 3 &&
! "*".equals( abc[2] ) &&
! "".equals( abc[2] ) ){
c = Integer.valueOf( abc[2] );
}
if( abc.length >= 2 &&
! "*".equals( abc[1] ) &&
! "".equals( abc[1] ) ){
b = Integer.valueOf( abc[1] );
}
if( abc.length >= 1 &&
! "*".equals( abc[0] ) &&
! "".equals( abc[0] ) ){
a = Integer.valueOf( abc[0] );
}
IdRange nrng = new IdRange( a, b, c );
for( IdRange r: rangeList ){
if( r.overlap( nrng ) ) return true;
}
rangeList.add( nrng );
return false;
}
public void dump(){
for( IdRange r: rangeList ){
System.out.println( r );
}
}
public static void main( String[] args ){
Ranges ranges = new Ranges();
for( String s: args ){
if( ranges.parseAndCheck( s ) ){
System.out.println( "overlap: " + s );
}
}
ranges.dump();
}
}
这是一个多么混乱的方法啊。试着把它分解成只做一件事的逻辑方法抱歉,我减少了代码。
public class Ranges {
private List<IdRange> rangeList = new ArrayList<>();
public boolean parseAndCheck( String s ){
String[] abc = s.split( "," );
Integer a = null;
Integer b = null;
Integer c = null;
if( abc.length == 3 &&
! "*".equals( abc[2] ) &&
! "".equals( abc[2] ) ){
c = Integer.valueOf( abc[2] );
}
if( abc.length >= 2 &&
! "*".equals( abc[1] ) &&
! "".equals( abc[1] ) ){
b = Integer.valueOf( abc[1] );
}
if( abc.length >= 1 &&
! "*".equals( abc[0] ) &&
! "".equals( abc[0] ) ){
a = Integer.valueOf( abc[0] );
}
IdRange nrng = new IdRange( a, b, c );
for( IdRange r: rangeList ){
if( r.overlap( nrng ) ) return true;
}
rangeList.add( nrng );
return false;
}
public void dump(){
for( IdRange r: rangeList ){
System.out.println( r );
}
}
public static void main( String[] args ){
Ranges ranges = new Ranges();
for( String s: args ){
if( ranges.parseAndCheck( s ) ){
System.out.println( "overlap: " + s );
}
}
ranges.dump();
}
}