我在char数组中测试了不同的元素,如果它们不符合条件,我想从数组中删除它们。有没有办法做到这一点?
这是我的代码sofar
String s;
char[] b = inputString.toCharArray();
b = new char[b.length];
do
{
if(!(b[i]>='0')&&(b[i]<='9')&&(b[i]!='.'))
{
s = Character.toString(b[i]);
if(s.equals("+"))
{
t = 1;
}
else if(s.equals("-"))
{
t = 2;
}
else if // and so on
}
else
{
t = 1029;
}
//want to delete element here if they fail if test
}
答案 0 :(得分:2)
这应该做你想要的:
ArrayList<char> charList = new ArrayList<char>(0);
for (int i= 0; i < b.length; i++) {
if (b[i] == condition) {
charList.Add(b[i]);
}
}
charList.toArray();
答案 1 :(得分:2)
因为评论不允许良好的代码格式化:
在代码开头,您将String
内容作为char[]
获取,并通过为变量分配相同大小的新char[]
来立即再次丢失。
char[] b = inputString.toCharArray();
b = new char[b.length];
所以循环在默认初始化数组上工作,而不是在字符串内容上工作。您需要两个数组引用来进行复制。
答案 2 :(得分:1)
在这里使用switch
声明可能更好。而不是从你的数组中消除你不想要的字符(迭代期间的变异是邪恶的,除非你使用Iterator
),为什么不使用StringBuilder
类来捕获所有的你做想要的角色?
答案 3 :(得分:1)
你真的无法删除该元素,但你可以通过执行类似b [i] = 0的操作来更改它;在给定代码的末尾。数组是一定的长度,长度不能改变,所以如果你想删除数组的那部分我会建议使用列表。
List temp = b.asList();
Iterator it = temp.iterator();
while(it.hasNext())
{
if(it.next() == "t") //your modification code here
it.remove();
}
char[] newB = temp.toArray();
我觉得这样的事情对你有用。
答案 4 :(得分:1)
char[] finishedArray = new char[0];
char[] arrayToCheck = new char[]{ 'a', 'b', 'c', 'd', 'e', 'f', 'g' };
for( int i = 0; i < arrayToCheck.length; i++ )
{
if( !doesNOTMeetSomeCondition( arrayToCheck[ i ] ) )
{
//DOES meet keep condition, add to new array
char[] newCharArray = new char[ finishedArray.length + 1 ];
for( int j = 0; j < finishedArray.length; j++ )
{
newCharArray[ j ] = finishedArray[ j ];
}
newCharArray[ finishedArray.length ] = arrayToCheck[ i ];
finishedArray = newCharArray;
}
}
//finishedArray contains desired result
如果您可以更改数据结构并且使用字符串来包含字符,那么列表将是更合适的工具。
List<String> finishedList = Arrays.asList( 'a', 'b', 'c', 'd', 'e', 'f', 'g' );
for( String charInList : finishedList )
{
if( doesNOTMeetSomeCondition( charInList.toCharArray()[ 0 ] ) )
{
finishedList.remove( charInList );
}
}
//finishedList contains the desired result
答案 5 :(得分:1)
你的程序有些不对劲:
String s;
char[] b = inputString.toCharArray();
b = new char[b.length];
do {
if(!(b[i]>='0')&&(b[i]<='9')&&(b[i]!='.')) {
...
}
} while...
您正在使用char[]
创建inputString
,然后在下一行中为char[]
变量指定一个全新的空b
。 b[i]
实际上永远不会等于0
,9
或i
。你错误地把这条线放在了这里吗?
然后对于删除的东西,我建议使用一个ArrayList,你可以在其中迭代它并非常容易地删除你想要的特定索引。{/ p>