3

Я новичок в программировании сети, и я никогда раньше не использовал Java для сетевого программирования. Я пишу сервер с использованием Java, и у меня есть сообщение о проблеме с клиентом. Я использовалjava indexOf возвращает -1, когда он должен возвращать положительное число

DataInputStream inputFromClient = new DataInputStream(socket.getInputStream()); 
while (true) { 
    // Receive radius from the client 
    byte[] r=new byte[256000]; 
    inputFromClient.read(r); 

    String Ffss =new String(r); 
    System.out.println("Received from client: " + Ffss); 
    System.out.print("Found Index :"); 

    System.out.println(Ffss.indexOf('\a')); 
    System.out.print("Found Index :"); 
    System.out.println(Ffss.indexOf(' ')); 

    String Str = new String("add 12341\n13243423"); 
    String SubStr1 = new String("\n");  
    System.out.print("Found Index :"); 
    System.out.println(Str.indexOf(SubStr1));  
} 

Если я делаю это, и есть пример ввода ASG 23 \ AAG, он возвращает:

Found Index :-1 
Found Index :3 
Found Index :9 

Понятно, что если объект струнный создается с нуля, IndexOf может найдите "\". Как получилось, что у кода возникнет проблема с поиском \ a, если String получается из обработки DataInputStream?

+2

неродственных, но не вызывать конструктор струны для простого создания строки. например предпочитаю 'String foo =" foo "' over 'String foo = new String (" foo ")' –

+0

@TheLostMind Я не копировал код из моего редактора, это была опечатка – Armin

+0

@SteveKuo Я сделал эту опечатку, я изменил бит после того, как я вставил свой код. Извините за путаницу – Armin

ответ

9

попробуйте String abc=new String("\\a"); - вам нужно \\, чтобы получить обратную косую черту в строке, иначе \ определяет начало «escape-последовательности».

+0

Это решило проблему! Благодаря !! – Armin

+0

Могу ли я спросить, почему он работает для String Str = new String ("add 12341 \ n13243423")? Он не требует \\ n, когда используется indexOf – Armin

+0

@Armin Поскольку в этой строке этот \ n представляет собой представление новой строки, попробуйте распечатать его, и вы увидите разрыв строки. вам также нужно сбежать отсюда, если вы хотите, чтобы он распечатывал сам \ n. – SomeJavaGuy

2

Похоже, что сбежал a.

Посмотрите на this article, чтобы понять, как косая черта влияет на строку.

Управляющие последовательности

Персонаж предшествует обратной косой черты (\) является побег последовательности и имеет особое значение для компилятора. В следующей таблице показаны управляющие последовательности Java:

| Escape Sequence | Description| 
|:----------------|------------:| 
| \t   | Insert a tab in the text at this point.| 
| \b   | Insert a backspace in the text at this point.| 
| \n   | Insert a newline in the text at this point.| 
| \r   | Insert a carriage return in the text at this point.| 
| \f   | Insert a formfeed in the text at this point.| 
| \'   | Insert a single quote character in the text at this point.| 
| \"   | Insert a double quote character in the text at this point.| 
| \\   | Insert a backslash character in the text at this point.| 
+0

Это полезный документ. благодаря! – Armin

Смежные вопросы