当前位置: 首页 > 知识库问答 >
问题:

唯一值的字符串串联不起作用

洪知
2023-03-14

我正在学习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

共有2个答案

孟佑运
2023-03-14

您需要认识到的是,Java中的字符串是不可变的。这意味着一旦创建了String对象,它的内容就永远不会改变。一开始这似乎是违反直觉的,但是相信我,不可变对象是一个非常重要的工具,它们使代码更安全,更容易管理。

concat方法不会更改String-它返回一个新的string实例,该实例的值与连接值相等。所以您应该做的是:st=st.concat(string.valueof(Person.getAge()));等等

如果您担心每次需要修改字符串时创建新对象不是最佳的(在这个阶段您肯定不应该这样做),那么有两个类可以帮助您:

  • StringBuilder-更快但不是线程安全
  • StringBuffer-线程安全
陶锋
2023-03-14


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 如何修复此错误并使程序正确运行?