webForumDet fria alternativet

Nybörjarfråga: Händer inget med Trim

.NET

9 svar · 548 visningar · startad av Compusa

Medlem sedan jan. 20023 327 inlägg
Frågan#1

Fråga 1

Jag sitter med ett väldigt simpelt exempel. Man skriver in en sträng i konsolen som jag sedan kör en trim() på och därefter skriver ut till konsolen igen. Borde inte följande sträng "Hej" resultera till "H e j"?

using System;

namespace Plump.cSharp {

    class StringTest {
	
		static void Main(string[] args) {
			Console.WriteLine("Type in a string");

			string input = Console.ReadLine();
			input = input.Trim();

			Console.WriteLine("The string was " + input);
			Console.ReadLine();
		}

    }

}

Fråga 2
I java skriver man exempelvis följande när man skapar en sträng:
String blaha = "Hej";

I C# skriver man string blaha = "Hej"; Varför denna skillnande med litet respektive stort S på string?

Medlem sedan dec. 19996 721 inlägg
#2

Nej, Trim tar bort mellanslag i slutet och början av strängen.

Medlem sedan jan. 20023 327 inlägg
#3

Okej, tack emission, har du lust att besvara min andra fråga om du kan? La till den i inlägget lite sent ;)

Medlem sedan nov. 20022 355 inlägg
#4

C# kan väl inte ta efter Java rakt av va? ;)

Medlem sedan dec. 19996 721 inlägg
#5

Compusa skrev:

Fråga 2
I java skriver man exempelvis följande när man skapar en sträng:
String blaha = "Hej";

I C# skriver man string blaha = "Hej"; Varför denna skillnande med litet respektive stort S på string?

Ja, varför inte? C# är inte Java, så MS kunde göra som de ville. I själva verket är "string" bara ett alias. Typen heter "System.String" och man kan använda den benämningen om man vill. Jag kan tänka mig att MS vill avdramatisera strängar lite, genom att få dem att se ut som vanliga primitiva typer.

Medlem sedan jan. 20023 327 inlägg
#6

Okej då "förstår" jag även om det inte känns helt logiskt. String är ett objekt men ska se ut att vara en primitiv typ...

Medlem sedan jan. 20012 204 inlägg
#7

Mm de är ju lite speciella på andra sätt också.

string s = "erik";
string k = s;
k = "kalle";

S behåller sitt värde,erik ,vilket det inte skulle göra i de flesta andra objekt.

Medlem sedan jan. 20023 327 inlägg
#8

Men du tilldelar aldrig s något annat än "erik" så det är väl inte så konstigt? k ger du först värdet "erik" för att sedan ge det värdet "kalle". Förstår inte vad som är konstigt så du får gärna förtydliga om du orkar ;)

Medlem sedan jan. 20012 204 inlägg
#9

Compusa skrev:

Men du tilldelar aldrig s något annat än "erik" så det är väl inte så konstigt? k ger du först värdet "erik" för att sedan ge det värdet "kalle". Förstår inte vad som är konstigt så du får gärna förtydliga om du orkar ;)

Man brukar göra skillnad på två olika typer av allokering, på "heapen" och på "stacken". När du lägger något på stacken så blir det i stil med:

Int i = 10; // i = 10
Int j = i; // j = 10
j = 20; // j = 20 och i = 10

Medan

ArrayList l1 = new ArrayList();
ArrayList l2= new ArrayList();
l1.add("hej");
l2 = l1;
l2.add("hej2);
// Om man kontrollerar så ser man att l1 och l2 innehåller samma värden, "hej" och "hej2".

Dessa typer kallas för referensetyper.

Trots vad man kan tro om String klassen så är den en referenstyp, detta innebär att man kan behöva använda någon annan klass (StringBuilder) om man arbetar mycket med stränghantering i något program.

Medlem sedan jan. 20023 327 inlägg
#10

Okej, man får tacka för svaret :)

260 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)