Проблема с экранированием символа при генерации страницы JavaScript с помощью кода Java?

#java #javascript

#java #javascript

Вопрос:

Я генерирую страницы JavaScript с помощью кода Java, например:

 FileOutputStream fs=new FileOutputStream("C:\Documents and Settings\prajakta\Desktop\searcheng.html");
OutputStreamWriter out=new OutputStreamWriter(fs);
out.write("<script language='JavaScript' type='text/javascript'>");
out.write("var str=new String('C:\Documents and  Settings\prajakta\Desktop\substr.html');");
out.write("var beg=str.lastIndexOf('\');");//double' ' **Problem Stmt**
  

И так далее.

Проблема в том, когда searcheng.html создается ли она, содержащая

 var beg=str.lastIndexOf('');//single '/'
  

что создает проблему при нахождении индекса ».
Как я должен написать эту проблему, чтобы она содержала двойное «»?

Аналогично, как я должен написать оператор

 out.write("document.write('< a href='str'> ' str.slice(beg 1,end) ' </a>');"); 
  

так что это создаст оператор в JavaScript как

 document.write('< a href=" 'str' ">  ' str.slice(beg 1,end) '  </a>');
  

и ссылка перейдет на страницу, адрес которой хранится в str ?

Ответ №1:

 out.write("var beg=str.lastIndexOf('\\');");
  

должно сработать. Дважды для Java, еще раз дважды для JavaScript…

Комментарии:

1. аналогично, как я должен написать инструкцию. write(» document.write(‘<a href=’str’> ‘ str.slice(beg 1,end) ‘ </a>’);»); так что это создаст инструкцию в javascript document.write(«<a href=’ » str «‘> » str.slice(beg 1,end) » </a>»); и ссылка перейдет на страницу, адрес которой хранится в str

2. out.write(» document.write(«<a href=’str’> ‘ str.slice(начало 1,конец) ‘ </a>»);»);

Ответ №2:

В строковых литералах Java символ обратной косой черты имеет особое значение как экранирующий символ. Если вы хотите представить сам символ обратной косой черты, вам нужно экранировать его самим собой.

Вот почему строковый литерал Java "\" представляет строку с одной буквой, которая является обратной косой чертой.

Если вы хотите представить строку с двумя обратными косыми чертами, вам нужно экранировать обе в вашем литерале: "\\" .

Ответ №3:

Попробуйте это:

     out.write("var beg=str.lastIndexOf('\\\');");
  

Дело в том, что » — это escape-символ в Java, поэтому, чтобы иметь 1, вы должны написать 2. Чтобы иметь 2, вы должны написать 4.