2012-12-19 39 views
4

当我从开放套接字获取IP地址时,有人向我发送了一个流,我注意到IP有一个正斜杠。Java - 如果语句不起作用(比较字符串)

我只是打算忽略它。但首先我要验证字符串中的第一个字符是正斜杠:

String dataSource = data.getAddress().toString(); 

if(dataSource.substring(0,1) == "/"){ 
    System.out.println("trailing forward slash, delete it "); 
    dataSource = dataSource.substring(1); 
} 

此IF语句未被检测到。

有人看到我在做什么错了吗?

+2

使用'.equals'来比较内容。 '=='总是通过引用来比较。 – nhahtdh

+0

@nhahtdh这是真的。然而,他显然是一个初学者(没有进攻),没有理由为此降低他的成绩。我赞成反对。 – FrostyFire

+0

legitamate问题,ameture是的,但不是一个愚蠢的问题,并措辞正确。 –

回答

2

对于字符串比较使用equals方法,因为它比使用更可靠==运营商(它比较内容,而==个comnpares引用):

尝试使用equals方法:

if(dataSource.substring(0,1).equals("/")){ 
1

你应该使用.equals字符串comparrisons 所以

if(dataSource.substring(0,1) == "/") 

应该

if ("/".equals(dataSource.substring(0,1))) 
0

使用.equals(Object).equalsIgnoreCase(String)比较字符串。

2

请使用.equals

if("/".equals(dataSource.substring(0,1))){ 
    System.out.println("trailing forward slash, delete it "); 
    dataSource = dataSource.substring(1); 
} 

,而不是==

1

你需要做的dataSource.substring(0,1).equals("/"),这实际上检查字符串的内容。 ==只检查双方是否是同一个对象。

0

试试这个

IF(( “一些字符串检查”)等于(MyString的)){ DoSomething的(); }

2

如果你只需要测试,第一个字符,你可以尝试的方法,

dataSource.charAt(0)== '/'

+0

除非为空或空白.. – Gevorg

0

始终使用equals比较值时。说了这么多,你可以只使用indexOf方法供您使用

if (dataSource.indexOf('/') == 0) { 
     dataSource = dataSource.substring(1); 
    } 
0
String dataSource = "/hell"; 

     if(dataSource.substring(0,1).equalsIgnoreCase("/")){ 
      System.out.println("trailing forward slash, delete it "); 
      dataSource = dataSource.substring(1); 
     } 

运行此程序。这是工作..

0

为什么要使用字符串?你只是为自己创造这个问题。使用提供的数据类型:

InetAddress dataSource = data.getInetAddress(); 

SocketAddress dataSource = data.getRemoteSocketAddress(); 

然后,你必须在这两种情况下语义感知.equals()方法。