Java StringBuffer';s replace方法无法正常工作';应该是
下面是一个代码,如果我在数组(arr)中遇到字母O,那么我必须将数组的相同索引(newArr)替换为“.”以及它的相邻索引,即索引(I,j),(I+-1,j)和(I,j+-1)需要替换为“.” 考虑阵列(arr)的此输入: 使用数组(newArr)应该获得什么输出: 我得到的输出:Java StringBuffer';s replace方法无法正常工作';应该是,java,arrays,replace,stringbuffer,Java,Arrays,Replace,Stringbuffer,下面是一个代码,如果我在数组(arr)中遇到字母O,那么我必须将数组的相同索引(newArr)替换为“.”以及它的相邻索引,即索引(I,j),(I+-1,j)和(I,j+-1)需要替换为“.” 考虑阵列(arr)的此输入: 使用数组(newArr)应该获得什么输出: 我得到的输出: OO...OO OO...OO OO...OO OO...OO OO...OO OO...OO PS:我知道一些极端情况,如果我们在索引中得到一个O,这将导致ArrayIndexOutOfBound异常。
OO...OO
OO...OO
OO...OO
OO...OO
OO...OO
OO...OO
PS:我知道一些极端情况,如果我们在索引中得到一个O,这将导致ArrayIndexOutOfBound异常。请考虑上面的例子。
import java.util.*;
public class Pattern{
public static void main(String[] args){
Scanner sc= new Scanner(System.in);
int R= sc.nextInt(); // Takes input for Rows
int C= sc.nextInt(); // Takes input for Coloumn
StringBuffer[] arr= new StringBuffer[R]; // Array of type StringBuffer to which input is given.
StringBuffer[] newArr= new StringBuffer[R]; // Array of type StringBuffer which shall be filled with alphabet "O".
for(int i=0; i<R; i++)
arr[i]= new StringBuffer(sc.next()); // Input given to array arr.
StringBuffer s= new StringBuffer(); // A new stringBuffer
for(int i=0; i<C; i++)
s.append("O"); // appends the required amount of alphabet O for newArr.
Arrays.fill(newArr, s); // fills the array with s(which contains only alphabet O).
for(int i=0; i<R; i++){
for(int j=0; j<C; j++){
if(arr[i].charAt(j) == 'O'){
newArr[i].replace(j, j+1, "."); // replaces "O" with "." in newArr.
newArr[i].replace(j+1, j+2, "."); // replaces "O" with "." in newArr.
newArr[i].replace(j-1, j, "."); // replaces "O" with "." in newArr.
newArr[i+1].replace(j, j+1, "."); // replaces "O" with "." in newArr.
newArr[i-1].replace(j, j+1, "."); // replaces "O" with "." in newArr.
}
}
}
for(int i=0; i<R; i++)
System.out.println(newArr[i]); // printing the new replaced array.
}
}
import java.util.*;
公共阶级模式{
公共静态void main(字符串[]args){
扫描仪sc=新的扫描仪(System.in);
int R=sc.nextInt();//接受行的输入
int C=sc.nextInt();//为column获取输入
StringBuffer[]arr=new StringBuffer[R];//指定输入的StringBuffer类型的数组。
StringBuffer[]newArr=newStringBuffer[R];//StringBuffer类型的数组,该数组应以字母“O”填充。
对于(int i=0;iSicne,您可以在newArr
中填入
将指定的对象引用指定给指定对象数组的每个元素
您在每个单元格中放置了相同的实例。因此,您在此处使用的是StringBuffer
的一个实例。这意味着,如果您在一个单元格中执行更新,则每个单元格将具有相同的更新(您仅使用一个对象)
您需要为每个单元格创建一个副本(在阵列上循环)
for(int i=0;i
您可以在newArr
中填入
将指定的对象引用指定给指定对象数组的每个元素
您在每个单元格中放置了相同的实例。因此,您在此处使用的是StringBuffer
的一个实例。这意味着,如果您在一个单元格中执行更新,则每个单元格将具有相同的更新(您仅使用一个对象)
您需要为每个单元格创建一个副本(在阵列上循环)
for(int i=0;i
为什么不在该代码中简单地char[][
呢?我不认为这里需要StringBuffer
。使用fill
将实例放在每个单元格中,而不是一个副本。因此,在newArr
的每个单元格中都有s
,相同的引用。为什么不简单地char[]
在该代码中?我不认为这里需要StringBuffer
。使用fill
将实例放在每个单元格中,而不是一个副本。因此,在newArr
的每个单元格中都有s
,相同的引用。或者,你可以用更简单、更有效的方法来做,只需创建一个二维数组。循环一下h您当前的算法,您不应该有任何问题。@AlexanderHeim我同意,我在评论中声明;)使用char[][
或String[]
如果需要的话。不变性可以防止这个问题。谢谢大家!它很有帮助!:)或者你可以用更简单、更有效的方法来做,只需创建一个二维数组。用你当前的算法循环一下,你应该不会有任何问题。@AlexanderHeim我同意,我在评论中声明;)使用char[]
或String[]
如果需要的话。不变性可以防止出现这种问题。谢谢大家!这很有帮助!:)
OO...OO
OO...OO
OO...OO
OO...OO
OO...OO
OO...OO
import java.util.*;
public class Pattern{
public static void main(String[] args){
Scanner sc= new Scanner(System.in);
int R= sc.nextInt(); // Takes input for Rows
int C= sc.nextInt(); // Takes input for Coloumn
StringBuffer[] arr= new StringBuffer[R]; // Array of type StringBuffer to which input is given.
StringBuffer[] newArr= new StringBuffer[R]; // Array of type StringBuffer which shall be filled with alphabet "O".
for(int i=0; i<R; i++)
arr[i]= new StringBuffer(sc.next()); // Input given to array arr.
StringBuffer s= new StringBuffer(); // A new stringBuffer
for(int i=0; i<C; i++)
s.append("O"); // appends the required amount of alphabet O for newArr.
Arrays.fill(newArr, s); // fills the array with s(which contains only alphabet O).
for(int i=0; i<R; i++){
for(int j=0; j<C; j++){
if(arr[i].charAt(j) == 'O'){
newArr[i].replace(j, j+1, "."); // replaces "O" with "." in newArr.
newArr[i].replace(j+1, j+2, "."); // replaces "O" with "." in newArr.
newArr[i].replace(j-1, j, "."); // replaces "O" with "." in newArr.
newArr[i+1].replace(j, j+1, "."); // replaces "O" with "." in newArr.
newArr[i-1].replace(j, j+1, "."); // replaces "O" with "." in newArr.
}
}
}
for(int i=0; i<R; i++)
System.out.println(newArr[i]); // printing the new replaced array.
}
}
for(int i = 0; i < newArr.length; ++i){
newArr[i] = new StringBuffer(s.toString());
}