java - 字符串的最后输出似乎没有改变
问题描述
最后一个 sysout 没有显示字符串发生了变化,有什么东西从我头顶飞过吗?
这会查找某个字符的位置并将其从字符串中删除:
import java.util.Scanner;
public class Main {
public static int search(String ch, char x) {
int i;
for ( i = 0; i < ch.length(); i++) {
if (ch.charAt(i) == x) {
break;
}
}
return i;
}
public static void decal(int x, String A) {
for (int i = x; i < A.length() -1 ; i++) {
char a = A.charAt(i);
a = A.charAt(i +1);
}
char e = A.charAt(A.length()-1);
e = '\0';
}
public static void main(String[] args) {
System.out.println("donner une chaine");
String name;
Scanner sc = new Scanner(System.in);
name = sc.nextLine();
char w;
System.out.println("donner un caractere");
w = sc.next().charAt(0);
int val = search(name, w);
System.out.println("la position de la lettre " + w + " est "+ val);
decal(val, name);
sc.close();
System.out.println(name);
}
}
解决方案
真的,您根本不需要该decal
方法,您可以简单地使用String.replace()方法将您需要的字符替换为空字符。例如:
public static void main(String[] args) {
char w;
System.out.println("donner une chaine");
Scanner sc = new Scanner(System.in);
String name = sc.nextLine();
System.out.println("donner un caractere");
w = sc.next().charAt(0);
int val = search(name, w);
System.out.println("la position de la lettre " + w + " est "+ val);
name = name.replace(name.charAt(val)+"", ""); //replace old character (notice conversion to String) with empty String.
sc.close();
System.out.println(name);
}
运行您的search
方法后,我们知道感兴趣字符的位置,因此我们可以简单地使用 replace() 方法将该位置的字符作为要替换的字符,将其转换为字符串,并将空字符串作为新的替代品。这将给出以下输出:
donner une chaine
hello
donner un caractere
e
la position de la lettre e est 1
hllo
我相信你希望使用类似的东西:
name = name.replace(name.charAt(val), '\0');
但请注意,像这样,您将使用将存在的 '\0' 字符替换字符(即它将是 'h\0llo'),尽管在打印语句时您不会看到它,因为转换为后台发生的字符串,输出看起来正确。如果需要,您可以通过将更改的 String 转换为 charArray 并检查它是否包含 '\0' 字符来轻松检查。例如,简单的检查:
String name1 = name.replace(name.charAt(val), '\0'); // h\0llo
String name2 = name.replace(name.charAt(val)+"", ""); // hllo
String name3 = name.replace(name.charAt(val)+"", "\0"); // h\0llo
System.out.print(name1.equals(name2)); //false
System.out.print(name1.equals(name3)); //true
因此,我建议使用给定的第一种方法(转换为字符串)。
推荐阅读
- java - 如何实现二叉搜索树(在我的问题的参数范围内)?
- ios - 将 CIFilter 保存为 RAW 图像
- intellij-idea - IntelliJ Community Edition 19.2.4 是否在 Kotlin 1.3.60 处理使用反引号的多平台测试名称时引入了一个错误?
- mysql - @EmbeddedId 字段是否已索引 Spring-data-jpa 实体?
- javascript - 如何以可以将返回值传递给另一个函数的方式从我的 HTML 表单返回用户输入?
- android - 摆脱android默认按钮带来的额外空间
- php - 如何将循环单选按钮值插入数据库
- regex - 如何检查字符串是否与正则表达式匹配
- apache-poi - 还有其他人在使用 Apache POI 向 Excel 添加纯色背景颜色时遇到问题吗?
- java - 为什么不可达?