我正在学习Java程序。我需要一个帮助,我想返回的值,存储在if条件。在下面的代码中,如果名称的长度大于或等于6,则先取5个字符,然后追加两次年龄,最后再追加6个字符。
例如:如果字符为alisha,则返回alish2727a
public static String uniqueID(Person person) {
String name = person.getName().replaceAll("\\s", "");
String ID = null;
if(name.length()>=6)
{
String st= name.substring(0,5);
String st1=name.substring(5,6);
st.concat(String.valueOf(person.getAge()));
st.concat(String.valueOf(person.getAge()));
st.concat(st1);
ID=st;
}
return ID;
Actual OUTPUT: alish
Expected output: alish2727a
您需要认识到的是,Java中的字符串是不可变的。这意味着一旦创建了String对象,它的内容就永远不会改变。一开始这似乎是违反直觉的,但是相信我,不可变对象是一个非常重要的工具,它们使代码更安全,更容易管理。
concat方法不会更改String-它返回一个新的string实例,该实例的值与连接值相等。所以您应该做的是:st=st.concat(string.valueof(Person.getAge()));
等等
如果您担心每次需要修改字符串时创建新对象不是最佳的(在这个阶段您肯定不应该这样做),那么有两个类可以帮助您:
String name = person.getName();
String age = String.valueOf(person.getAge());
String newName = “”;
if(name.length() >= 6){
newName = name.substring(0,5);
newName += newName + age + age;
newName += name.substring(5,6);
}
return newName;
Not tested, so not sure the result
问题内容: 以下语句, 产生输出。 但是,以下内容 产生。 区别在哪里? 问题答案: 您会因为操作符优先级和字符串转换的结合而看到此行为。 JLS 15.18.1 指出: 如果只有一个操作数表达式的类型为String,则对另一操作数执行字符串转换(第5.1.11节),以在运行时生成字符串。 因此,第一个表达式中的右侧操作数将隐式转换为字符串: 但是对于第二个表达式,必须将复合赋值运算符与一起考虑。
问题内容: 我正在从事Java代码优化。我不清楚或符号之间的区别: 第2行和第3行有什么区别? 问题答案: 这种方法使用StringBuilder创建结果字符串 此方法仅调用的静态方法来获取int的String版本 依次调用
本文向大家介绍通过+(字符串串联)运算符进行字符串串联。,包括了通过+(字符串串联)运算符进行字符串串联。的使用技巧和注意事项,需要的朋友参考一下 您可以使用Java的“ +”运算符来连接字符串。 示例 输出结果
我试图创建一个表示JSON对象数组的字符串文字,所以我想到了使用字符串插值特性,如下面的代码所示: 现在我想使用逐字字符串,这样我就不必使用反斜杠来转义双引号。因此,通过这个答案,我了解到逐字字符串和字符串插值可以一起使用。所以我改变了我的代码如下: 但它无法编译。如果我的用法有任何错误,或者在这种情况下无法使用C#的逐字字符串功能转义双引号,有人能帮我吗?
问题内容: 我需要知道是否可以连接字符串,如下所示?如果没有,那么还有什么选择呢? 它应该看起来像人等。 您不能在串联中使用符号,那么替代方法是什么? 问题答案: 仅用于连接。而您错过了增量!
代码如下: 运行时,这是错误消息: 错误:不匹配'运算符*'(操作数类型是'std::__cxx11::字符串{aka std::__cxx11::basic_string 如何修复此错误并使程序正确运行?