2015-04-01 305 views
0

我想通过一个int[]数组,并从中获取子串值。例如,如果我的阵列是{1,2,1,4}我希望能够取出{1,2}并将其与{1,4}比较,或者我想将{1,2,1}{4,1,2}进行比较。我的问题是,我想通过一个数组,并查看是否“substring”值再次显示在数组中,但以相反的顺序。在java中获取数组的子串

我知道你有substring(包括,排他)的字符串是否有任何类似的数组或我必须将数组转换为字符串才能做这样的事情?

+0

什么叫 “反向” 顺序是什么意思?为什么要比较“{1,2,1}”和“{4,1,2}”,以及如何?请分享更多具有明确要求和理解的例子。 – Braj 2015-04-01 04:45:42

+0

'java.util.Arrays。copyOfRange'(专用于每个基本元素类型或对象)以相同的顺序给出一部分,如String.substring。 AFAICT没有直接的方法来反转数组。 – 2015-04-01 05:58:18

回答

0

难道你不能简单地确定数组中你想使用的数字集和位置形式,然后从下一个索引开始搜索序列中的第一个或最后一个数字,然后一旦找到它,然后开始搜索下一个号码?

即[1,4,5,1,3,1,4,2]我们想要取[1,4]并且在阵列中发现它是相反的。

从索引2开始:[5]!= 1 - > [1] == 1 - > [3]!= 4 - > [3]!= 1 - > [1] == 1 - > [ 4] == 4,成功。

0

您可以简单地比较数组中的每个数字和最后一个数字,如果它们匹配,则进入一个循环,检查下一个数字是否与最后一个数字相同,等等。 其他人从循环中出来并说不匹配。

         Or 

您可以在给定数组中以相反顺序遍历来检查您的设置。 可能有点冗长,但对所有人都适用。

0

如果字符串表达式不需要其他的东西,你可以(也可能)只使用数组中的数字。

这是检查int数组中的区间的对称性的函数。你可以改变ini的参数,结束而不是ini,如果你愿意,可以相应地改变算法,当然。

public boolean checkSymmetry(int[] data, int ini, int length) { 
    // Iterates the interval of interest 
    for (int i=ini; i<ini+length-1; i++) { 
     // The symmetric position: start from the end (length), 
     // come back i positions and sum one (because arrays starts on 0) 
     int symmetricPos = data.length - i - 1; 
     if (data[i] != data[symmetricPos]) { 
      return false; 
     } 
    } 
    return true; 
} 
0

您可以将整数数组转换为字符串,但Arrays.toString()函数会将其直接转换。由此,从{1, 2, 2, 1}[1, 2, 2, 1]。有关更多信息,请参阅here

// strTest -> [1, 2, 2, 1] 
String strTest = Arrays.toString(test); 

但是,您可以删除方括号,逗号和空格。通过使用String.replace()String.replaceAll()函数。从[1, 2, 2, 1]1221

// strTest -> 1221 
strTest = strTest.replaceAll(", ", "").replace("[", "").replace("]", ""); 

如果要扭转现有字符串,可以使用StringBuffer.reverse()函数。

// use StringBuffer to acquire reverse of text 
StringBuffer buffer = new StringBuffer(strTest.substring(2, 4)); // it will get '21' of '1221' 
String revStrTest = buffer.reverse().toString(); // from '21' to '12' 

下面是完整的代码:

// from array of test 
int[] test = { 1, 2, 2, 1}; 

// strTest -> [1, 2, 2, 1] 
String strTest = Arrays.toString(test); 

// strTest -> 1221 
strTest = strTest.replaceAll(", ", "").replace("[", "").replace("]", ""); 

System.out.print(strTest.substring(0, 2) + " == " + strTest.substring(2, 4) + " : "); 

// checks 12 and 21 
if(strTest.substring(0, 2).equals(strTest.substring(2, 4))) 
    System.out.println("EQUAL"); 
else 
    System.out.println("NOT EQUAL"); 

// use StringBuffer to acquire reverse of text 
StringBuffer buffer = new StringBuffer(strTest.substring(2, 4)); // it will get '21' of '1221' 
String revStrTest = buffer.reverse().toString(); // from '21' to '12' 

System.out.print(strTest.substring(0, 2) + " == " + revStrTest + " : "); 

// checks 12 of strTest and 12 of revStrTest 
if(strTest.substring(0, 2).equals(revStrTest)) 
    System.out.println("EQUAL"); 
else 
    System.out.println("NOT EQUAL");