字符串java中缺少字符

时间:2015-01-16 14:20:08

标签: java tcp server tokenize stringbuilder

我正在尝试使用http帧实现一个java服务器,我有几个URI:/login.jsp和/logout.jsp,它们位于http格式的请求URi中。

当我向服务器发送注销请求时,我发送了一个标题,如下所示:

Cookie: user_auth="SomeCookie".

以下是代码:

public HttpMessage nextMessage() {
    if (!isAlive()) {
        try {
            throw new IOException("Tokenizer is Closed");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    // Return String
    HttpMessage newMessage = null;
    String output = null;
    StringBuilder stringBuilder = new StringBuilder();
    try {
        int c;

        while ((c = this.fInputStream.read()) != -1) {
            if (c == this.fDelimiter)
                break;
            else
                stringBuilder.append((char) c);
        }
        // Create an HttpMessage from the information received
        output = stringBuilder.toString();

    } catch (IOException e) {
        this.fClosed = true;
        try {
            throw new IOException("Connection is Dead");
        } catch (IOException e1) {
            e1.printStackTrace();
        }
    }
    newMessage = parseHttp(output);
    return newMessage;
}

parseHttp方法打破了类型,并将标题分开。

但问题是在向服务器发送登录操作后,如果我尝试发送注销操作,则存储在字符串构建器中的已解析信息缺少字符(更多特别是RequestType,RequestURI和HttpVersion)丢失了,只能找到标题。

此外,如果我尝试打印从inputStream收到的每个字符,那时我会看到应该在框架中的所有字符。

2 个答案:

答案 0 :(得分:0)

你确定你想要break;行而不是continue;中断将导致while循环退出而使用continue将简单地跳过else并运行while循环的下一次迭代。< / p>

答案 1 :(得分:0)

以下代码通过删除重复项来打印给定字符串中所有缺少的字符。

import java.util.*;
public class MissChars
{
 public static void main(String[] args) {
    Scanner sc=new Scanner(System.in);
    String str=sc.nextLine();
    StringBuffer sb=new StringBuffer();
    char c[]=str.toCharArray();
    LinkedHashSet<Character> set=new LinkedHashSet<Character>();
    for(int i=0;i<c.length;i++)
      set.add(c[i]);
    for(char cc:set)
      sb.append(cc);
    String sss=new String(sb);
    char arr[]=sss.toCharArray();
    for(char i='a';i<='z';i++)
    {
        for(int j=0;j<arr.length;j++)
        {
            if(i!=arr[j])
                count++;
            if(count==arr.length)
              System.out.print(i);
        }
        count=0;
    }
 }
}