ABA


"בעיה מוזרה במחרוזות בJAVA"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #14862 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 14862
mikomraz

   13:27   27.07.08   
אל הפורום  
  בעיה מוזרה במחרוזות בJAVA  
 
   שלום. נתקלתי בעיה מאוד מוזרה בJAVA:
String f = "(x)*(x)";
if (f.substring(3, 3+1) == "*")
System.out.pritnln("yes");

אפילו ששתי המחרוזות שמושוות הן "*", התנאי משום מה לא מתקיים. יש למישהו הסבר אולי?


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  ניסית לעשות ככה akoka 27.07.08 14:52 1
     לא עוזר :/ mikomraz 27.07.08 15:34 2
  נסה להשתמש ב-equals: Ice Cold  27.07.08 16:36 3
  למה לא לעשות עם charAt ? Mr Andersson 27.07.08 16:40 4
  אגב, עוד משהו בנושא השוואת מחרוזות Mr Andersson 27.07.08 16:44 5
     השוואת String BenQue  28.07.08 12:13 6
         חידשת לי, תודה :) Mr Andersson 28.07.08 14:52 7

       
akoka

   14:52   27.07.08   
אל הפורום  
  1. ניסית לעשות ככה  
בתגובה להודעה מספר 0
 
  

if (f.substring(3,3+1).toString() == "*" )
{
}

לא ממש מתעסק עם JAVA אבל זה צריך לעבוד מוזר שלא:|


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
mikomraz

   15:34   27.07.08   
אל הפורום  
  2. לא עוזר :/  
בתגובה להודעה מספר 1
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Ice Cold  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 3.8.02
28041 הודעות, 19 פידבק
   16:36   27.07.08   
אל הפורום  
  3. נסה להשתמש ב-equals:  
בתגובה להודעה מספר 0
 

String f = "(x)*(x)";
if (String(f.substring(3, 3+1)).equals("*"))
System.out.pritnln("yes");


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Mr Andersson
חבר מתאריך 19.3.02
6234 הודעות, 1 פידבק
   16:40   27.07.08   
אל הפורום  
  4. למה לא לעשות עם charAt ?  
בתגובה להודעה מספר 0
 
  
String f = "(x)*(x)";
if (f.charAt(f.indexOf("*")) == '*')
System.out.println("yes");

או לחילופין

String f = "(x)*(x)";
if (f.charAt(3) == '*')
System.out.println("yes");

http://i60.tinypic.com/35aowg8.jpg


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Mr Andersson
חבר מתאריך 19.3.02
6234 הודעות, 1 פידבק
   16:44   27.07.08   
אל הפורום  
  5. אגב, עוד משהו בנושא השוואת מחרוזות  
בתגובה להודעה מספר 0
 
   מחרוזות בJAVA הן עצמים, והאופטרטור == בעצם משווה את ההפניות שלהן ולא את התכולה, למשל
String f = "f";
String g = "f";
System.out.println(f==g);

יחזיר false, אך

String f = "f";
String g = "f";
g = f;
System.out.println(f==g);
יחזיר לך true

אז כדאי להשוות מחרוזות צריך להשתמש בפעולה equals או compareTo


String f = "f";
String g = "f";
System.out.println(f.equals(g));

יחזיר true

String f = "f";
String g = "f";
System.out.println(f.compareTo(g));
יחזיר 0 מכיוון שאין הבדל בין המחרוזות.

http://i60.tinypic.com/35aowg8.jpg


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
BenQue 
חבר מתאריך 13.11.11
7 הודעות
   12:13   28.07.08   
אל הפורום  
  6. השוואת String  
בתגובה להודעה מספר 5
 
למעשה בדוגמה הראשונה יתקבל TRUE כיוון שבעת הרצה, יקבלו שני המשתנים f ו-g אותה כתובת, כיוון שאין אפשרות לשנות String.


הצבה שונה באחד המשתנים יישנה את כתובתו, עד אז, g == f.


נכון, האופרטור == אינו מתאים להשוואת אוביקטים אך במקרה זה, זה יצליח.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Mr Andersson
חבר מתאריך 19.3.02
6234 הודעות, 1 פידבק
   14:52   28.07.08   
אל הפורום  
  7. חידשת לי, תודה :)  
בתגובה להודעה מספר 6
 
  

http://i60.tinypic.com/35aowg8.jpg


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net