我想替换"." 通过","在我想写入文件的String/double中.
使用以下Java代码
double myDouble = myObject.getDoubleMethod(); // returns 38.1882352941176
System.out.println(myDouble);
String myDoubleString = "" + myDouble;
System.out.println(myDoubleString);
myDoubleString.replace(".", ",");
System.out.println(myDoubleString);
myDoubleString.replace('.', ',');
System.out.println(myDoubleString);
Run Code Online (Sandbox Code Playgroud)
我得到以下输出
38.1882352941176
38.1882352941176
38.1882352941176
38.1882352941176
Run Code Online (Sandbox Code Playgroud)
为什么不替换做它应该做的事情?我希望最后两行包含",".
我必须做/使用别的东西吗?建议?
String s = ...;
s = s.substring(1);
Run Code Online (Sandbox Code Playgroud)
这可能吗?我以为你无法在Java中更改String对象.
我有以下两种与ArrayList get方法相关的情况,一种与自定义类有关,另一种与String类有关:
1.下面是修改Custom类ArrayList元素的示例:
ArrayList<MyClass> mTmpArray1 = new ArrayList<MyClass>();
MyClass myObj1 = new MyClass(10);
mTmpArray1.add(myObj1);
MyClass myObj2 = mTmpArray1.get(0);
myObj2.myInt = 20;
MyClass myObj3 = mTmpArray1.get(0);
Log.d(TAG, "Int Value:"+myObj3.myInt); // Prints "20"
Run Code Online (Sandbox Code Playgroud)
2.下面是修改String ArrayList元素的示例:
ArrayList<String> mTmpArray2 = new ArrayList<String>();
mTmpArray2.add("Test_10");
String myStr1 = mTmpArray2.get(0);
myStr1 = "Test_20";
String myStr2 = mTmpArray2.get(0);
Log.d(TAG, "Str Value:"+myStr2); // Prints "Test_10"
Run Code Online (Sandbox Code Playgroud)
因此,在MyClass ArrayList的情况下,当我调用get并修改值时,我看到更改将在get再次执行时反映出来。
但是以同样的方式修改字符串ArrayList时,更改不会反映出来。
get在这两种情况下,该方法有何不同?
是在String的情况下,String类创建深度复制并返回新对象,还是在Custom类的情况下创建浅拷贝?
在适用于“ LinkedHashMap”,“ HashMap”和“ List”的第一种情况下?
我试图理解字符串池的工作原理以及字符串与另一个字符串相等的规则是什么.
例如,这个片段:
public static void main(String[] hi){
String s1 = "lol";
String s2 = "lol";
String s3 = new String("lol");
System.out.println( s1 == s2 );// true
System.out.println( s2 == s3); // false
s3.intern(); //line 1
System.out.println( s1 == s3); // false
testString(s1);
}
private static void testString(String s1){
String s4 = "lol";
System.out.println( s1 == s4); // true
}
Run Code Online (Sandbox Code Playgroud)
在第1行:字符串被添加到字符串池中.由于它不等于s1,我假设字符串池中有重复.正确吗?
在池中复制的规则是什么?换句话说,someString == someString即使两个字符串具有相同的char序列,何时返回false?
PS:无论如何,我在任何地方都使用string1.equals(string2).我只是想深入了解潜在的机制.
我正在学习字符串概念,所以写了一个代码,期望一个不同的输出,但有一些非常意外的事情.
class stringmute
{
public static void main(String[] args)
{
String s1="Hello "; //string one.
System.out.println("Str1:"+s1);
String s2= s1+"world"; //New String.
System.out.println("Str2="+s2);
s1=s1+"World!!"; //This should produce only Hello right?
System.out.println("Str1 modified:"+s1);
}
}
Run Code Online (Sandbox Code Playgroud)
当我执行上面的代码时,我得到的输出为:
Str1:Hello
Str2=Hello world
Str1 modified:Hello World!!
Run Code Online (Sandbox Code Playgroud)
如果我做错了什么,请告诉我.由于字符串是不可变的,这意味着我们应该将"Str1 Modified"的输出作为"HELLO"而不是"HELLO WORLD !!".
我知道问题的标题不是很清楚,对不起,不知道如何提出.我有一个非常基本的java实现问题,我想关注应用程序性能,但它也涉及java中的String创建模式.
我理解Java中字符串的不变性概念.我不确定的是,我在某处读到以下内容不会产生两个不同的String对象:
String name = "Sambhav";
String myName= "Sambhav";
Run Code Online (Sandbox Code Playgroud)
我想知道Java是如何做到的?它是否实际在程序存储器中查找String值并检查其是否存在,如果它不存在则创建一个新的String对象?在这种情况下,显然它节省了内存,但存在性能问题.
还可以说我有这样的代码:
public void some_method(){
String name = "Sambhav";
System.out.println(name); // or any random stufff
}
Run Code Online (Sandbox Code Playgroud)
现在每次调用此函数时,是否有新的String被添加到内存中或者我使用相同的String对象?我很想知道这一切是如何发生的见解的?
如果我们这样说的话
String name = "Sambhav";
String myName= "Sambhav";
Run Code Online (Sandbox Code Playgroud)
因为参考不会创建新对象,怎么样
String name = new String("Sambhav");
String myName= new String("Sambhav");
Run Code Online (Sandbox Code Playgroud)
Java仍然能够捕获字符串是否相同,只是将myName指向与前一个语句中创建的对象相同的对象?
我知道那个数组a并b指向与字符串相同的地方s1,s2而不是.为什么?
码:
String[] a = {"a","b","c"};
String[] b = a;
a[0] = "Z";
String s1 = "hello";
String s2 = s1;
s1 = "world";
System.out.println(Arrays.toString(a) + " - a"); //a and b are same
System.out.println(Arrays.toString(b) + " - b");
System.out.println(s1 + " "+ s2); // s1 and s2 are not same.
Run Code Online (Sandbox Code Playgroud)
输出:
[Z, b, c] - a
[Z, b, c] - b
world hello
Run Code Online (Sandbox Code Playgroud) 有很多的问题,关于Java字符串不变性,对于这实际上这个问题的作者重新分配的参考.
然而,有一个显着的案例,似乎没有重新分配字符串:
String s = "hello";
s += " world";
Run Code Online (Sandbox Code Playgroud)
您将其视为字符串的实际修改.在家尝试一下.
我很确定这是一种语法糖,并由编译器翻译成具有相同语义的东西:
String s = "hello";
s = s + " world";
Run Code Online (Sandbox Code Playgroud)
有人可以证实这个事实吗?
我有像"12 345 678"这样的字符串,我想删除空格(因为转换为int).所以我按照惯例做了:myString.replaceAll("\\s", "");但是多么惊喜!它什么都没做,空间还在那里.
当我进一步调查时,我发现这个空格字符是Character.SPACE_SEPARATOR(Character.getType(myString.charAt(<positionOfSpaceChar>)))类型.
我没有得到的是为什么这个不经意的空格字符(来自Unicode类别Zs
http://www.fileformat.info/info/unicode/category/Zs/list.htm)不被认为是空格(甚至没有Character.isWhitespace(char)) .
通过java api阅读没有帮助(到目前为止).
注意:最后,我只想删除那个角色......我可能会找到一种方法,但我真的很想解释为什么它会像这样.谢谢
我无法理解为什么String不能像对象那样工作,以致于当您更改它时,分配给它的变量也会改变。
我尝试制作一个字符串数组,然后将一个元素的引用分配给一个变量(之所以说引用,是因为从我的理解中,Java是按值传递,而内存引用是“值”),
当我更改字符串时元素,该变量不反映更改。
String[] arr={"abc","def"};
String s=arr[1];
arr[1]+="123r";
for (String i:arr) {System.out.print(i);}
System.out.println(); // prints "abcdef123r"
System.out.println(s); //prints "def"
Run Code Online (Sandbox Code Playgroud)
也许,从我一直在阅读的内容来看,赋值运算符不能像Strings那样工作。
java ×10
string ×8
immutability ×4
android ×1
arraylist ×1
arrays ×1
character ×1
heap-memory ×1
oop ×1
performance ×1
replace ×1
unicode ×1